この式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
ため、相関関係はありません。)