Ответ 1
У меня нет абсолютно никакого представления о фактической конструкции команды, основывающейся на этом, но мне кажется, что это может быть своего рода "эквивалентность стоимости по умолчанию". Null является значением по умолчанию для строки, поэтому представляется логичным преобразовать его в значение по умолчанию для int. String.Empty, однако, является строкой, как и любые другие ненулевые строковые данные, поэтому ожидается, что она будет отформатирована, поэтому исключение.
Я думаю, что ArgumentNullException было бы "более чистым" решением, но я не знаю, какие внутренние проблемы могут быть за этим все...
Другое редактирование:
Там, прямо в документации MSDN, один из 5 возможных результатов:
Успешное преобразование. Для конверсий между двумя различными базовыми типами, не указанными в предыдущих результатах, все расширяющиеся преобразования, а также все суживающиеся преобразования, которые не приводят к потере данных, будут успешными, и метод вернет значение целевой базовый тип.
Кажется, что преобразование из нулевого объекта в другой тип не имеет причины для отказа (не ошибка формата, а не преобразование неподдерживаемого типа), но тип значения, такой как int, не имеет представления "без данных", поэтому значение по умолчанию значение целевого типа.
Быстрая мысль - "противоположное" преобразование, Convert.ToString(0)
, не возвращает значение null, потому что:
- 0 - это данные, во многих случаях это может быть очень важным и важным значением.
- null не является правильным строковым представлением 0