Der Ausdruck Convert.ToInt32(String.Empty)
wird eine FormatException auslösen, weil er einen leeren String nicht in einen Int32-Wert umwandeln kann.
Der Ausdruck Convert.ToInt32(DirectCast(Nothing, String))
in VB.NET oder Convert.ToInt32((string)null)
in C# wird jedoch das Null in einen Int32-Wert von Null umwandeln.
Wenn ich den .NET-Quellcode in Convert.cs
untersuche, sehe ich den folgenden Code:
public static int ToInt32(String value) {
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
Dies erklärt das Verhalten, aber ich möchte verstehen, warum es auf diese Weise geschrieben wurde, anstatt auch für einen leeren String Null zurückzugeben?
Zum Beispiel, warum wurde es nicht so geschrieben:
public static int ToInt32(String value) {
if (String.IsNullOrEmpty(value))
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
(Beachten Sie, dass String.IsNullOrEmpty()
und Convert.ToInt32()
beide auf .NET 2.0 zurückgehen, möglicherweise noch früher.)
Bearbeiten: Meine Frage ähnelt sehr dieser Frage, aber ich möchte auch wissen, warum Convert.ToInt32(String.Empty)
eine Ausnahme auslöst, anstatt den Int32-Standardwert von 0
zurückzugeben. (Die Antwort ist, dass String.Empty
nicht der Standardwert von String
ist, daher gibt es keine Korrelation.)