3

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

Convert.ToInt32("123")

或者

Int32.Parse("123")

或者

还有什么办法?

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

4

4 回答 4

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 本身内部实现的。

于 2012-05-04T06:22:52.783 回答
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. 这种行为最初是为 Visual Basic 程序员设计的

这是一组用于从 Visual Basic 6 迁移到 Visual Basic .NET 的程序员的转换方法,它反映了现有 Visual Basic 6 转换方法的行为。假设是 C# 程序员更愿意使用转换运算符,而 Visual Basic 传统上使用转换方法进行类型转换。

所以,作为非 VB 程序员,我会选择Int32.Parseand Int32.TryParse

于 2012-05-04T06:27:53.837 回答
1

从字符串转换为 int 时,我总是使用 int.TryParse。因为您并不总是确定可以将字符串转换为 int。像这样:

string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
    //Something
}
于 2012-05-04T06:26:06.490 回答
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
于 2012-05-04T06:24:19.223 回答