私は列挙型を持っていますFoo:
public enum Foo { Alpha, Bravo, Charlie }
intボックス化された から への次のキャストを試みると、Foo?が得られますInvalidCastException。
var x = (Foo?)(object)1;
これは私にいくつかの実験をもたらしました...
var x = (Foo)(object)1; // succeeds
var x = (long)(object)1; // fails
var x = (long?)(object)1; // fails
var x = (long)1; // succeeds
var x = (long?)1; // succeeds
var x = (int)(object)1; // succeeds
var x = (int?)(object)1; // succeeds
これが私に伝えていることは、ボックス化intされたものから列挙型にキャストすることはできますが、にキャストlongすることはできず、ボックス化intされたものからint?.
ところで、最初に to をキャストする理由は、int次のように からジェネリック パラメータobjectにキャストしようとしているからです。intTValue
var x = (TValue)(object)1;
がなければ(object)、コンパイルされません。(詳細については、Eric Lippert によるこのブログ投稿を参照してください。)
質問
- ボックス化 - intされたものから列挙型に変換できるのに、null 許容列挙型に変換でき- longないのはなぜ- long?ですか?
- var x = (TValue)(object)1;コンパイルし、実行時に動作し、パフォーマンスが向上するように書き換える最も簡単な方法は何ですか(実行時- TValueに a であると判断されたと仮定- Foo?します)。