更好地使用 int.Parse 或 Convert.ToInt32 [重复]
Posted
技术标签:
【中文标题】更好地使用 int.Parse 或 Convert.ToInt32 [重复]【英文标题】:Better use int.Parse or Convert.ToInt32 [duplicate] 【发布时间】:2011-04-27 00:09:13 【问题描述】:可能重复:Whats the main difference between int.Parse() and Convert.ToInt32
我想知道使用 Convert.ToInt32 VS int.Parse 的优点和缺点。
这是我正在使用的语法示例:
int myPageSize = Convert.ToInt32(uxPageSizeUsersSelector.SelectedValue);
int myPageSize = int.Parse(uxPageSizeUsersSelector.SelectedValue);
我也找到了这些文章,也许它们可以帮助讨论:
http://dotnetperls.com/int-parse http://aspdotnethacker.blogspot.com/2010/04/difference-between-int32parsestring.html http://aspdotnethacker.blogspot.com/p/visual-studio-performance-wizard.html【问题讨论】:
这两种方法都不比自定义的 int 解析代码快,因为在解析中必须处理空格、连字符、换行符等。 【参考方案1】:Convert.ToInt32
用于处理实现IConvertible
并且可以转换为int
的任何对象。此外,Convert.ToInt32
为null
返回0
,而int.Parse
则抛出ArgumentNullException
。
int.Parse
专门用于处理字符串。
事实证明,string
类型的 IConvertible
实现仅在其 ToInt32
方法中使用 int.Parse
。
如此有效,如果您在string
上调用Convert.ToIn32
,您正在调用int.Parse
,只是开销稍大(更多的方法调用)。
对于从string
到某些原始类型的任何转换都是如此(它们都调用Parse
)。因此,如果您正在处理强类型的 string
对象(例如,您正在解析文本文件),我建议您使用 Parse
,因为它更直接。
转换任意对象(例如,由某个外部库返回给您)是我选择使用 Convert
类的场景。
【讨论】:
【参考方案2】:没有太大区别。这是在 msdn 上找到的报价。
基本上是 Convert 类使它 更容易在所有基础之间转换 类型。
Convert.ToInt32(String, IFormatProvider) 下面调用 Int32.解析。所以唯一的区别是 如果一个空字符串被传递给 转换它返回 0,而 Int32.Parse 抛出一个 参数空异常。 MSDN
【讨论】:
【参考方案3】:我无法根据性能进行回答,但我首选的方法始终是 int.tryparse(mystring, out myint),因为它会给出一个完全失败的结果,您可以在程序流中进行测试(而不是执行 try/catch)。
【讨论】:
这真的取决于你想做什么。如果你真的需要解析成功,或者你知道它是一个数字的有效表示,那么使用 int.Parse 是完全有效的。当 TryParse 在这种情况下失败时,你会怎么做?你只会抛出另一个异常。 在我的使用中,会抛出 一个 异常,这对我的应用程序来说是一个有意义的异常 - 在您的使用中,会抛出两个或多个异常,一个或更多由 int.Parse 抛出并被您和您抛出以将上下文添加到向后传递的错误中。【参考方案4】:Convert 接口是一种更通用的接口。最终结果应该是一样的。
在内部,它只是调用 int.Parse:
public static int ToInt32(String value)
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
以上代码来自参考来源。
【讨论】:
以上是关于更好地使用 int.Parse 或 Convert.ToInt32 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Convert.ToInt16 或 32 或 64 和 Int.Parse 有啥区别? [复制]
Convert.ToInt32()和int.Parse()区别
更好的是: int.TryParse 或 try int.Parse() catch [关闭]
Convert.ToInt32()和int.Parse()的区别