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

本文关键字:是否 方法 转换 字符串 int 其他 | 更新日期: 2023-09-27 18:33:04

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

Convert.ToInt32("123")

Int32.Parse("123")

其他方式?

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

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

Convert.ToInt32 实际上是通过以下方式实现的......

int.Parse(value, CultureInfo.CurrentCulture);

。这与你所说的替代方案相同,只是它考虑了区域性设置。国际。解析方法本身是通过以下方式实现的...

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

从字符串转换为 int 时,我总是使用 int。尝试解析。因为您并不总是确定是否可以将字符串转换为 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