Выражение Convert.ToInt32(String.Empty)
будет вызывать исключение FormatException, потому что он не может разобрать пустую строку в значение Int32.
Однако выражение Convert.ToInt32(DirectCast(Nothing, String))
в VB.NET или Convert.ToInt32((string)null)
в С# будет анализировать значение 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
, поэтому нет корреляции.)