この質問は、ジェネリックメソッド内での列挙型のキャストに関連しています
列挙型が与えられた
public enum Crustaceans
{
Frog = 1,
Toad = 4
}
列挙型のインスタンスを簡単に作成できます
short val = 4;
Crustaceans crusty = (Crustaceans) val;
ただし、
short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;
無愛想な初期化を実行しようとすると、ランタイム例外がスローされます。
なぜこれが起こっているのか、そしてなぜそのようなことをすることが合法ではないのかを誰かが説明できますか?
私は本当にこれをやりたかったわけではありませんが、ジェネリックで同様のことが起こっていることを見つけようとすると、問題に遭遇します。事実上、それが隠れて起こっていることです。すなわち
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
だから私がやろうとしているのは、例外をスローせずに短い値に設定して実際に正しい列挙値を初期化できる、列挙型と非列挙型(それほど重要ではありませんがいいでしょう)で動作するジェネリック関数を持っていることです。