int.Parse()和Convert.ToInt32()之间的主要区别是什么? 哪一个是首选


当前回答

这是int的一个细节。解析和转换。ToInt32: 比如说,你有一个char数组,char[] a=['1','2','3','4'],你想把每个元素转换成一个整数。 Convert.ToInt32([0])会给你一个数字49。它将其视为ASCII码 int.Parse(a[0])将为您提供正确的输出,即1

如果你有一个字符串数组string[] b=['1','2','3','4'],那么转换。ToInt32和int。Parse在输出上没有区别。两者都返回正确的整数。

其他回答

Parse()方法提供了不能用于Convert()的数字样式。例如:

int i;
bool b = int.TryParse( "123-",
           System.Globalization.NumberStyles.AllowTrailingSign,
           System.Globalization.CultureInfo.InvariantCulture,
           out i);

会解析带尾符号的数字,以便I == -123 尾随符号在ERP系统中很流行。

Convert.ToInt32

有19种重载或者19种不同的调用方式。2010年的版本可能会更多。

它将尝试从以下类型进行转换;

对象,Boolean, Char, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64,单个,双精度,十进制,字符串,日期

它还有很多其他的方法;一种方法与数字基础有关,两种方法涉及系统。IFormatProvider

另一方面,Parse只有4种重载或者4种调用方法的不同方式。

Integer.Parse( s As String)

Integer.Parse( s As String,  style As System.Globalization.NumberStyles )

Integer.Parse( s As String, provider As System.IFormatProvider )

Integer.Parse( s As String,  style As System.Globalization.NumberStyles, provider As System.IFormatProvider )

请看反射镜:

int.Parse("32"):

public static int Parse(string s)
{
    return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo);
}

这是一个调用:

internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
    byte* stackBuffer = stackalloc byte[1 * 0x72];
    NumberBuffer number = new NumberBuffer(stackBuffer);
    int num = 0;
    StringToNumber(s, style, ref number, info, false);
    if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
    {
        if (!HexNumberToInt32(ref number, ref num))
        {
            throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
        }
        return num;
    }
    if (!NumberToInt32(ref number, ref num))
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return num;
}

Convert.ToInt32("32"):

public static int ToInt32(string value)
{
    if (value == null)
    {
        return 0;
    }
    return int.Parse(value, CultureInfo.CurrentCulture);
}

正如第一个(Dave M的)评论所说。

转换。ToInt32允许空值,它不会抛出任何错误 Int。解析不允许空值,它会抛出ArgumentNullException错误。

Int32.parse(字符串)——>

Int32。Parse (string s)方法将数字的字符串表示形式转换为等效的32位有符号整数。当s是空引用时,它将抛出ArgumentNullException。如果s不是整数值,则抛出FormatException。当s表示一个小于MinValue或大于MaxValue的数字时,它将抛出OverflowException。例如:

string s1 = "1234"; 
string s2 = "1234.65"; 
string s3 = null; 
string s4 = "123456789123456789123456789123456789123456789"; 

result = Int32.Parse(s1);    //1234
result = Int32.Parse(s2);    //FormatException
result = Int32.Parse(s3);    //ArgumentNullException 
result = Int32.Parse(s4);    //OverflowException

Convert.ToInt32(字符串)——> 转换。ToInt32(string s)方法将指定的字符串表示形式转换为等效的32位有符号整数。这将依次调用Int32。Parse()方法。当s是空引用时,它将返回0而不是抛出ArgumentNullException。如果s不是整数值,则抛出FormatException。当s表示一个小于MinValue或大于MaxValue的数字时,它将抛出OverflowException。

例如:

 result = Convert.ToInt32(s1);    // 1234 
 result = Convert.ToInt32(s2);    // FormatException
 result = Convert.ToInt32(s3);    // 0
 result = Convert.ToInt32(s4);    // OverflowException