この式Convert.ToInt32(String.Empty)は、空の文字列を Int32 値に解析できないため、FormatException を発生させます。
ただし、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);
}
(両方とも .NET 2.0 にさかのぼることに注意してください。おそらくそれ以前ですString.IsNullOrEmpty()。)Convert.ToInt32()
編集:私の質問はこの質問に非常に似てConvert.ToInt32(String.Empty)いますが、 Int32 の既定値の を返す代わりに例外が発生する理由も知りたいです0。(答えString.Emptyは のデフォルト値ではないStringため、相関関係はありません。)