10

最後のものが機能しない理由を誰かが知っていますか?

object nullObj = null;
short works1 = (short) (nullObj ?? (short) 0);
short works2 = (short) (nullObj ?? default(short));
short works3 = 0;
short wontWork = (short) (nullObj ?? 0); //Throws: Specified cast is not valid
4

2 に答える 2

15

は暗黙的にオブジェクトに変換される (ボックス化された) int であるため0、ボックス化された int を直接 short にアンボックスすることはできません。これはうまくいきます:

short s = (short)(int)(nullObj ?? 0);

ボックス化されたT(Tはもちろん、null を許容しない値の型です) は、Tまたはに対してのみボックス化を解除できますT?

于 2012-01-04T14:48:36.400 に答える
5

最後の行の null 合体演算子の結果は boxedintです。次に、それを にアンボックスしようとしてshortいますが、これは実行時に示した方法で失敗します。

それはあなたがこれをしたようなものです:

object x = 0;
short s = (short) x;

null 合体演算子の存在は、ここでは少し厄介です。

于 2012-01-04T14:49:29.097 に答える