【问题标题】:Better use int.Parse or Convert.ToInt32 [duplicate]更好地使用 int.Parse 或 Convert.ToInt32 [重复]
【发布时间】: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);

我也找到了这些文章,也许它们可以帮助讨论:

【问题讨论】:

  • 这两种方法都不比自定义的 int 解析代码快,因为在解析中必须处理空格、连字符、换行符等。

标签: c# asp.net performance


【解决方案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);
      }
      

      以上代码来自参考来源。

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 2011-06-24
        • 2010-09-17
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        相关资源
        最近更新 更多