msdnページから:
public static double ToDouble( char value )
パラメーター
値
タイプ:System.Char変換するUnicode文字。戻り値
タイプ:System.Doubleこの変換はサポートされていません。値は返されません。
サポートされていない場合、そもそもなぜ実装されているのですか?
msdnページから:
public static double ToDouble( char value )
パラメーター
値
タイプ:System.Char変換するUnicode文字。戻り値
タイプ:System.Doubleこの変換はサポートされていません。値は返されません。
サポートされていない場合、そもそもなぜ実装されているのですか?
それだけではありません。Convert.ToBoolean(char)、ToDateTime、ToDecimal、およびToSingleもサポートされていません。これらはすべて、ToDoubleと同様にInvalidCastExceptionをスローします。
これは、問題を回避しようとする.NET設計にすぎません。charを整数型に変換するのは合理的です。Unicodeマッピングテーブルを調べて、コードポイントを数えることができます。しかし、ブール値への変換はどういう意味ですか?どのUnicodeコードポイントが正しいですか?ToDateTimeは説明を必要としません。キャラクターが小数値になるにはどうすればよいでしょうか。半分または4分の1のコードポイントはありません。
それを機能させ、最初にInt32に変換してから、Doubleに変換することができます。ただし、必ず、コードをチェックして、それが意味のあることであることを確認してください。.NETの設計者は、そうではないと考えていました。彼らは正しかった。
MSDNによると、この関数は.Net 2.0での将来の使用のために予約されており、以前のバージョンの.netフレームワークをサポートするために4.5まで保持されています。
将来のOSがこのタイプの変換をサポートする場合、彼らはこれを実装します。現在、OSはcharをintとして格納しているため、内部変換が多いため、charをdoubleにキャストする方法は提供されていません。
内部ストレージ形式のため、Convert.ToDouble(DateTime)にも同じ制限があります。
各文字には対応する整数があります。例えば:
Convert.ToInt16('a') -> returns 97.
Convertがcharから他の型への変換をサポートしない主な理由は、文字の2番目の性質が整数型であるためだと思います。
おそらく、より明確な例は次のコードです。
char a = 'a';
int aVal = (int)a;
これは実際にConvert.ToInt32を実行します(ただし、オーバーフロー例外も発生します)