int.Parse() 和 Convert To.Int32() 的区别? [复制]
Posted
技术标签:
【中文标题】int.Parse() 和 Convert To.Int32() 的区别? [复制]【英文标题】:Differences between int.Parse() and ConvertTo.Int32()? [duplicate] 【发布时间】:2011-07-26 08:25:12 【问题描述】:可能的重复:difference between Convert.ToInt32 and (int)Whats the main difference between int.Parse() and Convert.ToInt32
C#
type.Parse() 方法和 ConvertTo 类的方法有什么不同吗?
【问题讨论】:
difference between Convert.ToInt32 and (int)、.Net Parse verses Convert 和 Whats the main difference between int.Parse() and Convert.ToInt32 的可能重复项 我会使用 type.TryParse 因为它更安全 更精确的副本是'Whats the main difference between int.Parse() and Convert.ToInt32'。 【参考方案1】:不,Int32.Parse
和 Convert.ToInt32(string)
之间没有实质性区别。后者只是将它的呼叫转发给Int32.Parse
一个小区别是,如果您将null
传递给Convert.ToInt32
,它将返回0,而Int32.Parse
将通过ArgumentNullException
传递
【讨论】:
【参考方案2】:一个显着的区别是 TypeConverter.ConvertTo(object) 在 object 为 null 时不会抛出异常,但 type.parse 在其内容为 null 时会抛出异常
【讨论】:
【参考方案3】:最重要的区别是:
-Convert.ToInt32(s) 在 s 为 null 时不抛出异常,但 Parse() 会如果您从 用户,你通常是用户 Int32.TryParse()
Int32.Parse() 和 Int32.TryParse() 只能转换字符串。 Convert.ToInt32() 可以采用任何类 实现了 IConvertible。
基本上说实话,当你看 在来自 TryParse 的源代码中 实际上没有异常处理 all - 只是字符操作和 位移
有关性能详细信息,请阅读此内容 邮政: http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx
【讨论】:
【参考方案4】:有一些差异,例如Convert 可以从许多对象(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】:AFAIK,int.Parse() 是从定义它的 Number 类继承的。 Convert.ToIn32() 实现了 IConvertable 接口,并在处理转换之前获取您传递的对象的类型。
无论如何,我认为它最终会在 Int32.Parse 结束。
【讨论】:
【参考方案6】:这是使用 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
参数时引发异常。
【讨论】:
【参考方案7】:转换或直接转换可能会导致数据丢失。您应该考虑使用“is”和“as”而不是强制转换或转换。除了防止数据丢失之外,它们在运行时都更加高效。
正如 Austin 所说,如果您要解析,请使用 tryparse 并相应地处理失败。
【讨论】:
以上是关于int.Parse() 和 Convert To.Int32() 的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Convert.ToInt32()和int.Parse()的区别
Convert.ToInt16 或 32 或 64 和 Int.Parse 有啥区别? [复制]
int.Parse()int.TryParse()和Convert.ToInt32()的区别
Convert.ToInt32(int)和int.Parse三者的区别