更好地使用 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.ToInt32null 返回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()的区别

int.Parse() 和 Convert To.Int32() 的区别? [复制]

int.Parse()int.TryParse()和Convert.ToInt32()的区别