int.Parse()和ConvertTo.Int32()之间的区别?

时间:2011-03-30 19:11:51

标签: c# parsing

  

可能重复:
  difference between Convert.ToInt32 and (int)
  Whats the main difference between int.Parse() and Convert.ToInt32

C#

type .Parse()方法与ConvertTo类的方法有什么区别吗?

7 个答案:

答案 0 :(得分:3)

Int32.ParseConvert.ToInt32(string)之间没有实质性区别。后者只是将其调用转发给Int32.Parse

但一个小的区别是,如果您将null传递给Convert.ToInt32,它将返回0,而Int32.Parse将通过ArgumentNullException

答案 1 :(得分:1)

一个值得注意的区别是TypeConverter.ConvertTo(object)在object为null时不抛出异常,但是当type.parse的内容为null时它会抛出异常

答案 2 :(得分:1)

最重要的区别是:

  • -Convert.ToInt32(s)在s为null时不抛出异常,但是Parse() 确实
  • 如果您正在收集来自的输入 用户,你通常是用户 Int32.TryParse()

  • Int32.Parse()和Int32.TryParse() 只能转换字符串。 Convert.ToInt32()可以接受任何类 实现IConvertible。

  • 基本上,事实上,当你看 来自TryParse的来源吧 实际上没有异常处理 所有 - 只是角色操纵和 比特移位

  • 有关效果详情,请阅读此内容 职位: http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx

答案 3 :(得分:0)

AFAIK,int.Parse()继承自Number类,并在其中定义。 Convert.ToIn32()实现IConvertable接口,并在处理转换之前获取您传递的对象的类型。

无论哪种方式,我认为它最终都会在Int32.Parse结束。

答案 4 :(得分:0)

存在一些差异,例如转换可以从许多对象(Int16,字符串,SByte等)转换为Int32。此外,Int32.Parse可以接受NumberStyles,而Convert.ToInt32则不能。

除此之外,Reflector(http://reflector.red-gate.com)有这样说:

类转换:

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

答案 5 :(得分:0)

这是使用Reflector检索的代码。

Int32.Parse

public static int Parse(string s)
{
    return 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

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

所以,Convert无论如何都会调用Int32的方法。使用Int32.Parse会更有效率,但您需要考虑它可以在传递null参数时抛出异常。

答案 6 :(得分:0)

转换或直接转换会导致数据丢失。您应该考虑使用“is”和“as”而不是转换或转换。除了防止数据丢失,这些在运行时也更有效。

正如Austin所说,如果你要解析,请使用tryparse并相应地处理失败。