C#(四十九)之Convert类 和 Parse方法的区别

251 阅读3分钟

「这是我参与2022首次更文挑战的第38天,活动详情查看:2022首次更文挑战

Convert数据类型转换类,从接触C#开始,就一直在用,这篇日志做下深入的了解。

Convert类常用的类型转换方法

方法说明
Convert.ToInt32()转换为整型(int)
Convert.ToChar()转换为字符型(char)
Convert.ToString()转换为字符串型(string)
Convert.ToDateTime()转换为日期型(datetime)
Convert.ToDouble()转换为双精度浮点型(double)
Conert.ToSingle()转换为单精度浮点型(float)

长类型(int、long)转换成短类型(byte、short)需要考虑容量的问题

转换为int型数据后进行了四舍五入的计算。
用convert类转换时注意数据表达方式的有效性,并不是任意类型之间都可以转换。比如string类型转int类型,string只能是数字。

示例:

int a = 1234;
            string asd = Convert.ToString(a);
            Console.WriteLine(asd);  // 1234
            Console.WriteLine(asd.GetType()); // System.string
 
            char qwe = Convert.ToChar(a);
            Console.WriteLine(qwe);  // ?  字符只能是一位
            Console.WriteLine(qwe.GetType());  // System.Char
 
            string dc = "4125";
            int ws = Convert.ToInt32(dc);
            Console.WriteLine(ws);  // 4125
            Console.WriteLine(ws.GetType());  // System.Int32
 
            string dates = "2019-05-31"; // 必须是字符串才能转换成datetime
            DateTime qa = Convert.ToDateTime(dates);
            Console.WriteLine(qa);  // 2019/5/31 0:00:00
            Console.WriteLine(qa.GetType()); // System.DateTime
 
            string zxc = "5.32";
            double po = Convert.ToDouble(zxc);
            Console.WriteLine(po);  // 5.32
            Console.WriteLine(po.GetType());// System.Double
 
            float rf = Convert.ToSingle(zxc);
            Console.WriteLine(rf);  // 5.32
            Console.WriteLine(rf.GetType());// System.single

Convert 和 Parse区别:

1.Convert.ToDouble与Double.Parse的区别。实际上Convert.ToDouble与 Double.Parse 较为类似,实际上 Convert.ToDouble内部调用了 Double.Parse:

(1)对于参数为null的时候:
Convert.ToDouble参数为 null 时,返回 0.0; 

double wer = Convert.ToDouble(null);  // 0
Console.WriteLine(wer);

Double.Parse 参数为 null 时,抛出异常。 

double ed = Double.Parse(null);   // 报错
Console.WriteLine(ed);


(2) 对于参数为""的时候:
Convert.ToDouble参数为 "" 时,抛出异常; 

wer = Convert.ToDouble("");
Console.WriteLine(wer);

Double.Parse 参数为 "" 时,抛出异常。 

double ed = Double.Parse("");
Console.WriteLine(ed);

(3)其它区别:

Convert.ToDouble可以转换的类型较多; 
Double.Parse 只能转换数字类型的字符串。
Double.TryParse 与 Double.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0.0。

  2.Convert.ToInt32()与int.Parse()的区别

(1)这两个方法的最大不同是它们对null值的处理方法: 
Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。 

int cdf = Convert.ToInt32(null);  // 0
Console.WriteLine(cdf);
int pol = int.Parse(null);  // 报错
Console.WriteLine(pol);


(2) 对数据进行四舍五入时候的区别
a. Convert.ToInt32(double value) 
如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。 不过4.6可以转换为5,4.4转换为4 

int ppp = Convert.ToInt32(5.5);  // 6
Console.WriteLine(ppp);


b. int.Parse("4.5") 
直接报错:"输入字符串的格式不正确". 

int aaa = int.Parse("4.5");  // 报错
Console.WriteLine(aaa);


c. int(4.6) = 4 
Int转化其他数值类型为Int时没有四舍五入,强制转换 

int lkj = (int)4.9;
Console.WriteLine(lkj);  // 4

(3)对被转换类型的区别
int.Parse是转换String为int 
Convert.ToInt32是转换继承自Object的对象为int的(可以有很多其它类型的数据). 
你得到一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32. 

object obj = new object();
obj = (object)4;
int aaaaa = Convert.ToInt32(obj);
Console.WriteLine(aaaaa);
 
int bbbbb = int.Parse(obj);  // 这样写报错

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问小程序:

在这里插入图片描述