Jose Miguel Sepulveda Asked: 2020-04-13 09:56:42 +0800 CST 2020-04-13 09:56:42 +0800 CST 2020-04-13 09:56:42 +0800 CST 如何在 C# 中正确解析 772 解析,我发现如下: Int32.Parse(string); Convert.ToInt32(string); 我的问题如下: 什么是最好的解析方式,哪个更有效,为什么。在什么情况下使用一种形式,在什么情况下使用另一种形式? c# 2 Answers Voted Best Answer NaCl 2020-04-13T10:14:00+08:002020-04-13T10:14:00+08:00 不久前我在评论中提到“它们都做同样的事情,除了它们根据它们'解析'的值抛出不同的异常。” 也就是说(来源),您有以下内容: string convertToInt = "12"; string nullString = null; string maxValue = "32222222222222222222222222222222222"; string formatException = "12.32"; int parseResult; // Convertirá correctamente. parseResult = int.Parse(convertToInt); // Arrojará NullException. parseResult = int.Parse(nullString); // Arrojará OverflowException . parseResult = int.Parse(maxValue); // Arrojará FormatException. parseResult = int.Parse(formatException); // Lo mismo, utilizando Convert.ToInt32 // Funcionará perfecto. parseResult = Convert.ToInt32(convertToInt); // Retornará Cero si el string es null. parseResult = Convert.ToInt32(nullString); // Arrojará OverflowException parseResult = Convert.ToInt32(maxValue); // Arrojará FormatException parseResult = Convert.ToInt32(formatException); 你可以在这里试试小提琴。:) 编辑: Convert.ToInt32()具有不同的重载,允许您将几乎任何内容转换为int,但是int.Parse()您只能传递给string,在每种情况下都抛出上述相应的异常,并提到它int.Parse()有几个重载来指定数字的格式。 编辑2: 最后,从本质上讲,这两个实现都调用了 .NET Framework 内部的被调用方法Number.Parse,请参阅下面两个函数的源代码1: // Int32.Parse(String s) Implementación. [Pure] public static int Parse(String s) { return Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo); } // Convert.ToInt32(String value) implementación. public static int ToInt32(String value) { if (value == null) return 0; return Int32.Parse(value, CultureInfo.CurrentCulture); } 也就是说,在调用级别,是的,它可能Int32.Parse(string)更快,因为它保存了一个内部调用,而不是像Convert.ToInt32(object),它首先评估要转换的对象,然后调用Parse(). 1:两种实现的源代码,感谢参考源参见:Convert.ToInt32(string)e Int32.Parse(string)。 Leandro Tuttini 2020-04-13T10:13:16+08:002020-04-13T10:13:16+08:00 两种方法都有效,我看到的一个区别是 Convert.ToInt32() 允许您将各种数据类型分配为参数 转换.ToInt32 而 Int32.Parse() 只能传递一个字符串 Int32.Parse(字符串) 两者都有效 如果你有 Int32.TryParse() 如果您想验证转换而不收到异常
不久前我在评论中提到“它们都做同样的事情,除了它们根据它们'解析'的值抛出不同的异常。”
也就是说(来源),您有以下内容:
你可以在这里试试小提琴。:)
编辑:
Convert.ToInt32()
具有不同的重载,允许您将几乎任何内容转换为int
,但是int.Parse()
您只能传递给string
,在每种情况下都抛出上述相应的异常,并提到它int.Parse()
有几个重载来指定数字的格式。编辑2:
最后,从本质上讲,这两个实现都调用了 .NET Framework 内部的被调用方法
Number.Parse
,请参阅下面两个函数的源代码1:也就是说,在调用级别,是的,它可能
Int32.Parse(string)
更快,因为它保存了一个内部调用,而不是像Convert.ToInt32(object)
,它首先评估要转换的对象,然后调用Parse()
.1:两种实现的源代码,感谢参考源参见:
Convert.ToInt32(string)
eInt32.Parse(string)
。两种方法都有效,我看到的一个区别是 Convert.ToInt32() 允许您将各种数据类型分配为参数
转换.ToInt32
而 Int32.Parse() 只能传递一个字符串
Int32.Parse(字符串)
两者都有效
如果你有
Int32.TryParse()
如果您想验证转换而不收到异常