Подтвердить что ты не робот

Почему Convert.ToDouble(char) не поддерживается?

На странице msdn:

public static double ToDouble( char value )

Параметры

значение
Тип: System.Char Символ Unicode для преобразования.

Возвращаемое значение
Тип: System.Double Это преобразование не поддерживается. Не возвращается значение.

Если он не поддерживается, почему он реализован в первую очередь?

4b9b3361

Ответ 1

Это не единственный. Convert.ToBoolean(char), ToDateTime, ToDecimal и ToSingle также не поддерживаются, все они вызывают InvalidCastException, например ToDouble.

Это просто дизайн .NET, который пытается избавить вас от неприятностей. Преобразование char в интегральный тип является разумным, вы можете посмотреть таблицы отображения Unicode и подсчитать коды. Но что означало бы преобразование в Boolean? Какая точка кода Unicode имеет значение True? ToDateTime не требует объяснений. Как персонаж мог быть дробным? Нет кодовых страниц с половиной или четвертью.

Вы можете заставить его работать, сначала конвертировать в Int32, а затем преобразовать в Double. Но непременно проверьте свой код и убедитесь, что это то, что нужно делать. Дизайнеры .NET думали, что это не так. Они были правы.

Ответ 2

Каждый символ имеет соответствующее целое число. Например:

Convert.ToInt16('a') -> returns 97.

Я предполагаю, что главная причина, по которой Convert не поддерживает преобразование из char других типов, заключается в том, что второй характер символа является целым типом.

Возможно, более понятным примером является следующий код:

char a = 'a';
int aVal = (int)a;

На самом деле Convert.ToInt32 делает (но также вызывает исключение переполнения)

Ответ 3

В соответствии с MSDN эта функция сохраняется в будущем для использования в .Net 2.0 и хранится до 4.5 для поддержки предыдущей версии .net-фреймворков.

Они будут реализовывать это, если будущая ОС будет поддерживать этот тип преобразования. В настоящее время ОС хранит char как int, поэтому не предоставляет способ сделать char двойным из-за большого количества внутренних преобразований.

Из-за внутреннего формата хранения такое же ограничение распространяется на Convert.ToDouble(DateTime).