繁体   English   中英

将字符串转换为int(或其他内容),是否有首选方法?

[英]Converting string to int (or something else), is there a prefered way?

有时我想知道,在将字符串转换为其他类型时,例如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.ToInt32Int32.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.ParseInt32.TryParse

当从string转换为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM