该表达式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,因此没有相关性。)