有时我想知道,将字符串转换为其他类型(例如 int32)时,一种方式比另一种方式更好,还是只是品味问题?
Convert.ToInt32("123")
或者
Int32.Parse("123")
或者
还有什么办法?
如果在这个问题中它不是有效的 int,则不考虑这种情况。
有时我想知道,将字符串转换为其他类型(例如 int32)时,一种方式比另一种方式更好,还是只是品味问题?
Convert.ToInt32("123")
或者
Int32.Parse("123")
或者
还有什么办法?
如果在这个问题中它不是有效的 int,则不考虑这种情况。
Convert.ToInt32实际上是通过以下方式实现的...
int.Parse(value, CultureInfo.CurrentCulture);
...这与您所说的替代方案相同,只是它考虑了文化设置。int.Parse方法本身是通过以下方式实现的......
Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
...其中 Number 是您不能直接调用的内部类。Number.ParseInt32方法标有以下属性...
[MethodImpl(MethodImplOptions.InternalCall)]
...表明它是在 CLR 本身内部实现的。
Conver.ToInt32
和之间的主要区别在于Int32.Parse
如何处理null
字符串。Convert.ToInt32
在这种情况下返回默认值:
public static int ToInt32(string value)
{
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
我不喜欢那样。我认为只"0"
应该解析为0
. 这种行为最初是为 Visual Basic 程序员设计的:
这是一组用于从 Visual Basic 6 迁移到 Visual Basic .NET 的程序员的转换方法,它反映了现有 Visual Basic 6 转换方法的行为。假设是 C# 程序员更愿意使用转换运算符,而 Visual Basic 传统上使用转换方法进行类型转换。
所以,作为非 VB 程序员,我会选择Int32.Parse
and Int32.TryParse
。
从字符串转换为 int 时,我总是使用 int.TryParse。因为您并不总是确定可以将字符串转换为 int。像这样:
string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
//Something
}
正如 V4Vendetta 建议的那样,最好使用 TryParse 来避免与转换相关的异常。
int result = 0;
a = "3";
string b = "b";
string c = "2147483648"; //int32 max value + 1
int.TryParse(a, out result); // returns true result=3
int.TryParse(b, out result); // returns false result=0
int.TryParse(c, out result); // returns false result=0