将字符串转换为int(或其他东西),有一种首选方式吗?

时间:2012-05-04 06:18:05

标签: c# type-conversion

有时我想知道,将字符串转换为其他类型时,例如int32,是比另一种更好的方法,还是仅仅是品味问题?

Convert.ToInt32("123")

Int32.Parse("123")

其他一些方式?

如果在这个问题中它不是有效的int,则不考虑这种情况。

4 个答案:

答案 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.ToInt32Int32.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.ParseInt32.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