parse 和Covert.To 都能把有效的数据转化成相应的格式,但在实际情况中什么时候用parse 和什么时候用Convert.To 这个一直都很模糊。
下面是 Int32.Parse(string) 和Convert.ToInt32 反射出来的代码
Int32.Parse(string)
{
return int.Parse(s, NumberStyles.Integer, null);
}
{
NumberFormatInfo info1 = NumberFormatInfo.GetInstance(provider);
NumberFormatInfo.ValidateParseStyle(style);
return Number.ParseInt32(s, style, info1);
}
Convert.ToInt32
{
if (value == null)
{
return 0;
}
return int.Parse(value);
}
从代码中能看出的一个最明显的差别:
1. Convert.ToInt32 () 方法是调用了 int.Parse()方法
2. Convert.ToInt32 在string 为null的时候不会抛 System.ArgumentNullException 类型的异常。
从安全上面来说, Convert.ToInt32 比int.Parse上面更安全点,但是从执行的速度上面,parse 要比Convert.ToInt32 要快一些。但是在出现System.FormateException,System.OverflowException 异常的时候,Convert.ToInt32 和int.Parse 都没有什么方法避免,出现异常之后, 速度上面一样会降下来。我们这个时候需要捕获异常,然后在处理。
还好.net 2.0之后, 出来了一个TryParse()的方法,
public static bool TryParse(string s, out int result);
如果转化成功, 返回实际的结果,如果类型转化失败, 返回0;这样在类型的转换过程中,就不会出现异常,这个比Parse和Convert都要好,而且在执行的速度上面要比Convert要快。 所以我们在实际的使用中最好是用TryParse 方法