在本次博客中,主要围绕int.Parse的异常进行说明。
在c#中使用int.Parse将其他类型转换成int型时,运行程序是经常抛出以下三种异常类型:
1,System.ArgumentNullException 转换对象为null
2,System.FormatException 格式不正确
3,System.OverflowException 转换对象溢出
对于System.ArgumentNullException这种情况而言,int.Parse在判断转换对象为null时,其不能转换出一个固定的值来,如果是Convent.ToInt32()来转换null那么返回的诗0,其实Convent.ToInt32()和int.Parse较为相似,因为前者实际上在内部调用了后者进行处理,然而Convent.ToInt32()却可以转换更多的类型,并且异常处理机制也优于int.Parse()。但既然相似也有相同的地方,当二者的转换对象都为“”时,二者都将抛出异常。
System.FormatException,是指明转换对象的类型与目标类型不匹配,如int nbalance = int.Parse(strBalance);strBalance=100.00。strBalance在转换后并不是整型,一次会抛出System.FormatException异常。修改int nbalance = int.Parse(strBalance)为Decimal nbalance = decimal.Parse(strBalance); 此时转换可以继续执行,不会抛出异常。其实在这里Convent.ToInt32()也无能为力,尽管其可以转换更多的对象类型,但在转换对象格式不正确这里,其也不能做出除了报错意外的任何有效措施来。
溢出是贯穿整个计算机行业一个经久不衰的问题,System.OverflowException即为转换对象溢出,可能上溢出,也可能下溢出,在转换对象溢出时, int.Parse函数不会做出其他的行为,比如当溢出时,取溢出边界的值作为转换对象,或者当成0来处理。 int.Parse在与到溢出时,其直接抛出异常。
在转换其他类型为int型时,其实还有一个int.TryParse,int.TryParse与int.Parse也较为相似,但是int.TryParse不会产生异常,因为int.TryParse(bool,int)是一个可以返回bool对象的函数,但转换成功时,返回true,转换失败返回false。最后一个参数为输出值,当转换失败时,其值为0。
在c#中使用int.Parse函数时,应当尽量避免抛出异常的情况发生,如果不能避免,则应选择其他的转换函数,如Convent.ToInt32(),int.TryParse(bool,int)等。