该表达式Convert.ToInt32(String.Empty)
将引发 FormatException,因为它无法将空字符串解析为 Int32 值。
但是,Convert.ToInt32(DirectCast(Nothing, String))
VB.NET 或Convert.ToInt32((string)null)
C# 中的表达式会将 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)
会引发异常而不是返回 Int32 默认值0
。(答案String.Empty
不是 的默认值String
,因此没有相关性。)