0

Object 型から 10 進数にキャストしようとしています。

 Object obj = new Object();
 obj = 10;
 decimal dec = (decimal)obj;

しかし、この行 decimal dec = (decimal)objでは、次の例外が発生します。

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

このボックス化解除を実装できない理由は何ですか?

前もって感謝します。

4

3 に答える 3

2

と書くobj = 10;と、 object は int 型の値を持ちます。

これを試して:

Object obj = new Object();
obj = 10M;
decimal dec = (decimal)obj;

またはこれ:

Object obj = new Object();
obj = 10;
decimal dec = (decimal)(int)obj;

msdn のBoxing and Unboxing の記事を読む必要があります。

実行時に値型のボックス化解除を成功させるには、ボックス化解除される項目が、その値型のインスタンスをボックス化することによって以前に作成されたオブジェクトへの参照である必要があります。null のボックス化を解除しようとすると、NullReferenceException が発生します。互換性のない値の型への参照をボックス化解除しようとすると、InvalidCastException が発生します。

于 2013-07-14T11:09:13.620 に答える