式Convert.ToInt32(String.Empty)
は、空の文字列を解析してInt32値に変換できないため、FormatExceptionを発生させます。Convert.ToInt32(String)on String.Empty対NULL
ただし、VB.NETの式Convert.ToInt32(DirectCast(Nothing, String))
またはC#のConvert.ToInt32((string)null)
という式は、nullをInt32値0に解析します。 Convert.cs
での.NETソースに掘り
が、私は次のコードを参照してください。
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、両方の日付に注意してください。)
編集:私の質問this questionと非常によく似ていますが、Convert.ToInt32(String.Empty)
が0
というInt32のデフォルト値を返す代わりに例外を発生させる理由も知りたいと思います。 (答えはString.Empty
で、デフォルト値はString
ではないため、相関関係はありません)
空の文字列*は文字列であり空の文字列は空の文字列であるのに対して、それは数字ではありません。 (個人的には、それほど寛大でなくてもいいと思っていますが、それは別の問題です。) –
+1興味深い質問です。私は例外をスローすることを期待していました。 *特にInt32.Parse(null)が例外をスローしたとき! (Ok、それは変換と解析の微妙な違いですが、それでも...) –
このタイプの質問であなたの心を吹き飛ばしたいのであれば、SQLのNULLとC#の 'null'を比較し契約してください。 –