一、背景
通常格式转换时直接使用Parse功能,但这只能转换String类型的数据,后来搜集资料发现c#中还有Convert方法,我对这两者产生了兴趣,接下来便对这两个进行简单的介绍。
首先我对这两个的感受有点像买手机,一个是正常版本的手机,一个是手机版本+Pro,当然Parse是正常版本的,Convert更像是Pro类型的。两者功能及其相似,但是总体使用来看Convert似乎比Parse更加适用于各种场景,但是两者之间的区别也让某些场景中更适合用Parse(就像我买手机没钱,那就买正常版本的手机,虽然性能垃圾了点,但是适合我)
二、Convert与Parse的一些区分
Convert常用功能如下所示:
Convert.ToBoolean(obj)// obj转换为bool
Convert.ToByte(obj)// obj转换为byte
Convert.ToChar(obj)// obj转换为char
Convert.ToDecimal(obj)// obj转换为decimal
Convert.ToDouble(obj)// obj转换为double
Convert.ToInt16(obj)// obj转换为short
Convert.ToInt32(obj)// obj转换为int
Convert.ToInt64(obj)// obj转换为long
Convert.ToSByte(obj)// var转换为sbyte
Convert.ToSingle(obj)// obj转换为float
Convert.ToString(obj)// obj转换为string
Convert.ToUInt16(obj)// obj转换为ushort
Convert.ToUInt32(obj)// obj转换为uint
Convert.ToUInt64(obj)// obj转换为ulong
2.1、转换String的区别
- ToString()
使用最多的是ToString()方法,使用这个方法最重要的就是对目标object进行null的判断或者异常处理,有时在编写代码时忘记判断运行时会出现NullReferenceException
的异常报错。 - Convert.ToString(obj)
有时我们只是对某一值进行赋值或者想将判断条件写在同一处,那么可以使用此方法。例如上面的null
在这里进行转换后还是null
,""
转换后还是""
,这样就不容易产生空值异常。
2.2、转换int的注意点
- 对null的处理
使用int.Parse(null)
会报NullReferenceException
异常,而Convert.ToInt32(null)
不会产生异常,他是将null转换为0,平常使用的时候如果对0需要注意的还是慎用Convert的转换方法。 - 想将小数点转为int
Convert.ToInt32(double)
对xx.5这个格式的小数有特殊的需求,他是取相邻两个整数中偶数的情况,其余情况会四舍五入。如:
Convert.ToInt32(12.5);// 12
Convert.ToInt32(11.5);// 12
Convert.ToInt32(12.6);// 13
Convert.ToInt32(11.1);// 11
注意使用int.Parse(str)
时,其中str必须是整数类型,否则直接报System.FormatException
格式错误。
int.Parse("123");//123
int.Parse("12.3");//格式错误
当然也有人喜欢用(int)12.3
的格式转换,这是可以转换的,但是他不是四舍五入,而是截取整数部分。
三、总结
这两个使用体验及其相似却又有不同,总体而言Parse必须里面跟的是String,Convert可以包含各种类型,此外就像是正常手机和Pro手机,虽然Pro手机很好,但也不适用于所有情况,具体细节可以自己慢慢品味。