浅谈Int.Parse()、Convert.toInt32()和(int)区别

痞子三分冷 提交于 2019-12-01 14:39:49

以前看面试题,偶尔看到些关于这些类型转换的问题,经过网络上查询,发现不完整,所以整理了下,加上了自己的见解!
一、定义上的差别

int类型表示一种整型,.NET Framework 类型为 System.Int32。而是用(int)表示显式强制类型转换,当从 int 类型到 longfloatdouble decimal 类型,称为隐式转换;当从从double decimalfloat longint类型逐级转换时,称为显式强制类型转换。(对long 类型或是浮点型到int 类型的显式强制转换中使用,但是如果被转换的数值大于 Int32.MaxValue 或小于 Int32.MinValue,那么则会得到一个错误的结果)

Int.Parse()表示将数字的字符串转换为32位有符号整数,属于内容转换。

Convert.toInt32()表示可以将多种类型(包括 object  引用类型)的值转换为 int  类型。

Int32.TryParse int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false

二、Int.Parse()Convert.toInt32()的差别

   1Int.Parse()当传入的是Null,将会抛出异常;Convert.toInt32()当传入的是Null,将返回0

        例如:Int.Parse(null)抛出异常,Convert.toInt32(null)==0,返回true

2Int.Parse()传入的是” ”,将会抛出异常;Convert.toInt32()传入的是” ”,也将抛出异常。

    例如:Int.Parse(“”)Convert.toInt32(“”)都将抛出异常。

3、性能差异:

Int32.TryParse()优于Int32.Parse()优于Convert.ToInt32()

Convert.ToInt32会把最终的解析工作代理给Int32.Parse,而Int32.ParseInt32.TryParse则分别把解析工作直接代理给Number.ParseInt32Number.TryParseInt32,前者在出现解析,错误时会抛出异常,而后者则仅仅返回 false

三、差别的常见例子:

1long   longtype=100;

    Int   inttype=longtype;     //错误的写法,因为没有进行显式强制转换

    Int   inttype=(int)longtype; //正确的写法

2string  stringtype=”12345”;

   Int   inttype=(int)stringtype;   //错误,string不能直接转换为int

   Int   inttype=Int.Parse(stringtype);  //正确

3long longType = 100;
        string stringType = "12345";
        object objectType = "54321";
        int intType = Convert.ToInt32(longType);       //
正确
        Int intType = Convert.ToInt32(stringType);     //
正确
        int intType = Convert.ToInt32(objectType);    //
正确

4double doubleType = Int32.MaxValue + 1.011; 

  int   intType = (int)doubleType;       //虽然运行正确,但是得出错误结果
     int  intType=Convert.ToInt32(doubleType) ; //
OverflowException 异常 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!