4

誰かがなぜこれが起こっているのか説明してもらえますか?

var y = new int[]{1,2};

Console.WriteLine(y is uint[]); // false
Console.WriteLine(((object)y) is uint[]); // true
4

1 に答える 1

7

intc# では anを aにキャストできないuintため、最初のテストは定数 false にコンパイルされるため失敗します。

ただし、CLR では int->uint キャスト許可されています。2 番目のチェックはコンパイラによって推測できないため、実行時に計算する必要があります。コンパイラ チェックをかわしたので、CLR はそれを許可します。

于 2012-06-15T09:52:04.870 に答える