可能重复:
difference between Convert.ToInt32 and (int)
Whats the main difference between int.Parse() and Convert.ToInt32
C#
type .Parse()方法与ConvertTo类的方法有什么区别吗?
答案 0 :(得分:3)
Int32.Parse
和Convert.ToInt32(string)
之间没有实质性区别。后者只是将其调用转发给Int32.Parse
但一个小的区别是,如果您将null
传递给Convert.ToInt32
,它将返回0,而Int32.Parse
将通过ArgumentNullException
答案 1 :(得分:1)
一个值得注意的区别是TypeConverter.ConvertTo(object)在object为null时不抛出异常,但是当type.parse的内容为null时它会抛出异常
答案 2 :(得分:1)
最重要的区别是:
如果您正在收集来自的输入 用户,你通常是用户 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并相应地处理失败。