Convert.ToInt32(String.Empty)
表达式会引发一个FormatException异常,因为它无法将空字符串解析为Int32值。
然而,在VB.NET中,Convert.ToInt32(DirectCast(Nothing, String))
或在C#中Convert.ToInt32((string)null)
的表达式将null解析为零的Int32值。
深入研究.NET资源文件中的Convert.cs
,可以看到以下代码:
public static int ToInt32(String value) {
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
这解释了行为,但我想知道为什么它是这样编写的,而不是对于空字符串也返回零?
例如,为什么它没有被写成:
public static int ToInt32(String value) {
if (String.IsNullOrEmpty(value))
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
(请注意,String.IsNullOrEmpty()
和 Convert.ToInt32()
都可以追溯到 .NET 2.0,或更早的版本。)
编辑:我的问题与此问题非常相似,但我也想知道为什么Convert.ToInt32(String.Empty)
会引发异常,而不是返回0
的 Int32 默认值。(答案是String.Empty
不是String
的默认值,因此没有关联)
NULL
和 C# 中的null
。 - P.Brian.Mackey