1、转换对象不同
Convert.ToInt32()中可以为多种类型(除了DateTime,转换DateTime类型数据始终会报InvalidCastException异常),它适合将Object类型转换为int类型。int.Parse()和int.TryParse()中只能是整型字符串类型(即各种整型ToString()之后的形式,不能为浮点型,如4.5,否则int.Parse()就会出现输入的字符串格式不正确的错误。int.TryParse()也会返回false,输出参数为0),(int)只能转换数字类型(例float,int,uint等)。
2、对于Null的处理不同
从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受Null。Convert.ToInt32其实是在转换前先做了一个判断,参数如果为Null,则直接返回0,否则就调用int.Parse()进行转换,int.TryParse()其实是对int.Parse做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。
3、针对浮点型的取舍不同
浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了的,Convert.ToInt32()采取的取舍并不是四舍五入,而是遵循:如果浮点数为两个整数中间的数(如:4.5,5.5,6.5),则返回二者中的偶数(即4,6,6);而其他的数又分为比中间数稍大的数,如4.6,则返回5;比中间数稍小的数,如4.4,则返回4。而(int)则是截取浮点型的整数部分,忽略小数部分。如参数是4.5的话,Convert输出5,(int)输出4。
4、关于溢出不同
将大的数据类型转换为小的数据类型时,Convert.ToInt32()和int.Parse()都会报溢出错误,值对于Int32太大或太小,而(int)不报错,如果数太大则返回int32的最小值,如果数太小则返回int32的最大值。
5、扩展
探索了int各种转换的区别后,我也想知道常用的ToString()和Convert.ToString()有什么区别呢?这里不做深入研究,不过有一点可以确定,那就是用Null值ToString()会报空指针异常,而用Convert.ToString()则返回空字符串,不会报异常,看来它在转换之前已经做了简单的异常处理。
总结
如此可见,我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,如果是整型字符串类型的,考虑用int.Parse()进行转换,如果不是这两种类型,再考虑用Convert.ToInt32()进行转换。
原文:百度知道(一)、百度知道(二)、MSDN