20

msdnページから:

public static double ToDouble( char value )

パラメーター


タイプ:System.Char変換するUnicode文字。

戻り値
タイプ:System.Doubleこの変換はサポートされていません。値は返されません。

サポートされていない場合、そもそもなぜ実装されているのですか?

4

4 に答える 4

5

それだけではありません。Convert.ToBoolean(char)、ToDateTime、ToDecimal、およびToSingleもサポートされていません。これらはすべて、ToDoubleと同様にInvalidCastExceptionをスローします。

これは、問題を回避しようとする.NET設計にすぎません。charを整数型に変換するのは合理的です。Unicodeマッピングテーブルを調べて、コードポイントを数えることができます。しかし、ブール値への変換はどういう意味ですか?どのUnicodeコードポイントが正しいですか?ToDateTimeは説明を必要としません。キャラクターが小数値になるにはどうすればよいでしょうか。半分または4分の1のコードポイントはありません。

それを機能させ、最初にInt32に変換してから、Doubleに変換することができます。ただし、必ず、コードをチェックして、それが意味のあることであることを確認してください。.NETの設計者は、そうではないと考えていました。彼らは正しかった。

于 2012-04-25T09:43:05.770 に答える
3

MSDNによると、この関数は.Net 2.0での将来の使用のために予約されており、以前のバージョンの.netフレームワークをサポートするために4.5まで保持されています。

将来のOSがこのタイプの変換をサポートする場合、彼らはこれを実装します。現在、OSはcharをintとして格納しているため、内部変換が多いため、charをdoubleにキャストする方法は提供されていません。

内部ストレージ形式のため、Convert.ToDouble(DateTime)にも同じ制限があります。

于 2012-04-25T09:09:40.907 に答える
2

各文字には対応する整数があります。例えば:

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

Convertがcharから他の型への変換をサポートしない主な理由は、文字の2番目の性質が整数型であるためだと思います。

おそらく、より明確な例は次のコードです。

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

これは実際にConvert.ToInt32を実行します(ただし、オーバーフロー例外も発生します)

于 2012-04-25T08:16:23.150 に答える