-1

私はSharepointで小さなコードを扱っていました。それは次のようになります:

int? do_ = (int?)re["mi"]; // consider "re" a dictionary<string, object>;

等号の右側の式は a に評価されDoubleます。double念のためdouble、ウォッチウィンドウで確認しました(:D)。そして、ええ、それはSystem.Double、インとアウトです。

ただし、その行は例外をスローします。

指定されたキャストは無効です。

はい、値の非整数部分を失いますが、doubleをintにキャストできることに気づきました(これは実際に私の場合に意図されています)。これは、世界が動き出す前のプログラミングの最初の日に学びました。

そこで、さらに確実にするために、別のソリューションである単純なコンソール アプリを作成しました。私はそれにこのコードを入れました:

double dragon = 2.0;
int? i = (int?)dragon;

そして、期待どおりに機能します。

ある設定では機能するのに、別の設定では失敗するのはなぜですか?

4

3 に答える 3

9

これは非常によくある質問です。ボックス化された をまたは以外にボックス化解除するTことはできません。 TT?

ここで理由を説明します:

http://ericlippert.com/2009/03/03/representation-and-identity/

于 2013-07-15T20:57:44.330 に答える
2

しかし、これはあなたのために働くはずです

(int?)(double)re["mi"];

Edit1 上記のコードは、ボックス化されたタイプが double の場合double? に機能し、次のように機能させる場合は機能しません

(int?)(double?)re["mi"];
于 2013-07-15T20:59:44.580 に答える