有时我想知道,将字符串转换为其他类型时,例如int32,是比另一种更好的方法,还是仅仅是品味问题?
Convert.ToInt32("123")
或
Int32.Parse("123")
或
其他一些方式?
如果在这个问题中它不是有效的int,则不考虑这种情况。
答案 0 :(得分:4)
Convert.ToInt32 实际上是通过以下方式实现的......
int.Parse(value, CultureInfo.CurrentCulture);
...除了考虑到文化背景外,它与您声明的替代方案相同。 int.Parse 方法本身通过以下方式实现...
Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
...其中Number是您无法直接调用的内部类。 Number.ParseInt32 方法标有以下属性...
[MethodImpl(MethodImplOptions.InternalCall)]
...表明它是在CLR本身内实现的。
答案 1 :(得分:2)
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
。此行为最初为designed for Visual Basic programmers:
这是一组程序员从Visual Basic 6迁移到Visual Basic .NET的转换方法,它们反映了 现有的Visual Basic 6转换方法。假设是C# 程序员对铸造操作员会更舒服,而 Visual Basic传统上使用类型的转换方法 转换。
所以,作为非VB程序员,我会选择Int32.Parse
和Int32.TryParse
。
答案 2 :(得分:1)
从string转换为int时,我总是使用int.TryParse。因为您并不总是确定可以将字符串转换为int。像这样:
string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
//Something
}
答案 3 :(得分:0)
由于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