更好的选择是使用int.Parse还是Convert.ToInt32?

16

可能是重复的:
int.Parse()和Convert.ToInt32之间的主要区别是什么?

我想知道使用Convert.ToInt32 VS int.Parse的优缺点。

这里是我正在使用的语法示例:

            int myPageSize = Convert.ToInt32(uxPageSizeUsersSelector.SelectedValue);

            int myPageSize = int.Parse(uxPageSizeUsersSelector.SelectedValue);

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


没有一种方法比自定义的 int 解析代码更快,因为在解析过程中必须处理空格、连字符、换行符等。 - bandybabboon
4个回答

28
Convert.ToInt32 用于处理任何实现了 IConvertible 接口且可以转换为 int 的对象。此外,Convert.ToInt32 对于 null 返回 0,而 int.Parse 则会抛出 ArgumentNullException 异常。

int.Parse 是专门用来处理字符串的。

事实证明,string 类型的 IConvertible 实现仅在其 ToInt32 方法中使用 int.Parse

因此,如果你调用 Convert.ToIn32 来处理一个 string,实际上相当于稍微多了一些开销(几个方法调用),但本质上仍然是在调用 int.Parse

对于所有从 string 转换为某种基元类型的转换(它们都调用 Parse),这都是正确的。因此,如果你正在处理强类型的 string 对象(例如解析文本文件),我建议使用 Parse,因为它更直接。

当处理由某个外部库返回给你的任意对象时,这就是使用 Convert 类的场景。


17

这两者没有太大区别。以下是在 MSDN 上找到的引用:

基本上,Convert 类使得各种基础类型之间的转换更加容易。

Convert.ToInt32(String, IFormatProvider) 内部调用了 Int32.Parse。所以唯一的区别在于,如果将空字符串传递给 Convert,则它会返回 0,而 Int32.Parse 则会抛出 ArgumentNullException 异常。 MSDN


3

我不能根据性能来回答,但我的首选方法总是int.tryparse(mystring, out myint),因为它会给出一个干净的失败,你可以在程序流中进行测试(而不是使用try/catch)。


这真的取决于你想做什么。如果你真的需要解析成功,或者知道它是一个有效的数字表示,那么使用int.Parse是完全有效的。在这种情况下,如果TryParse失败了,你会怎么做?你只需抛出另一个异常。 - Pieter van Ginkel
2
在我的使用中,会抛出一个异常,而那将是对我的应用有意义的异常 - 在你的使用中,会抛出两个或更多异常,一个或多个由int.Parse抛出并被你捕获,另一个是你为了增加错误上下文而抛出的。 - user32826

2

Convert接口是一个更通用的接口。然而,最终结果应该是相同的。

在内部,它只是调用int.Parse:

public static int ToInt32(String value) {
    if (value == null)
        return 0;
    return Int32.Parse(value, CultureInfo.CurrentCulture);
}

上述代码来自参考来源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接