比较Parse,TryParse,Convert
Parse,TryParse,Convert都是用于类型转换处理的
1string src = "abc";
2int res = 0;
3//Parse会抛出FormatException
4res = Int32.Parse(src);
5//Convert会抛出FormatException
6res = Convert.ToInt32(src);
7//res返回0
8Int32.TryParse(src, out res);
9
2int res = 0;
3//Parse会抛出FormatException
4res = Int32.Parse(src);
5//Convert会抛出FormatException
6res = Convert.ToInt32(src);
7//res返回0
8Int32.TryParse(src, out res);
9
Parse与Convert方法在格式不正确时转换会抛出异常,TryParse返回0;
当为空值时,Parse与Convert也会抛出异常,TryParse还是返回0。
1string src = null;
2int res = 0;
3//抛出ArgumentNullException
4res = Int32.Parse(src);
5//res返回0
6res = Convert.ToInt32(src);
7//res返回0
8Int32.TryParse(src, out res);
9
2int res = 0;
3//抛出ArgumentNullException
4res = Int32.Parse(src);
5//res返回0
6res = Convert.ToInt32(src);
7//res返回0
8Int32.TryParse(src, out res);
9
Parse方法在转换对象为NULL时抛出异常,Convert与TryParse返回0。
TryParse在参数未初始化时就被传递并且在空引用和转换失败时不会引发异常。在性能上应该比Parse与Convert高效一点。
1double src = 6.6;
2int res = 0;
3//无法重载
4res = Int32.Parse(src);
5//res返回7
6res = Convert.ToInt32(src);
7//无法重载
8Int32.TryParse(src, out res);
9
2int res = 0;
3//无法重载
4res = Int32.Parse(src);
5//res返回7
6res = Convert.ToInt32(src);
7//无法重载
8Int32.TryParse(src, out res);
9
上面代码可以看出,Convert类的重载方法比较多,而且结果返回的是7,Convert类除了将类型转换,还对返回的结果进行了处理,这里Convert类将6.6处理成7了,当为6.5时返回的是6,证明并不是单纯的截取,从这里也可以看出Convert类执行的是一种的显式转换,即强制类型转换,是高精度转换为低精度,因此不能保证数据的完整与正确性,会丢失数据。显式数据类型转换是不安全的,溢出数据时会触发OverflowException。
当然,对于数字与字符串之间的转换,.NET类库提供了ToString()方法;而且执行引用类型的显式类型转换,我们还可以采用as运算符,转换失败as运算符会返回一个null;
Convert类可以用于显示转换,重载方法比较多.TryParse是不会引发异常,转换失败返回0;