2015-09-10 22 views
6

nullable列挙型へのキャストに関する質問があります。コードは次のとおりです。null可能な列挙型へのキャスト

enum Digits 
{ 
    One = 1, 
    Two = 2 
} 

void Main() 
{ 
    int one = 1; 
    object obj = one; 
    var en = (Digits?) obj; 
    Console.WriteLine(en); 
} 

これは、私にInvalidCastExceptionの行番号11を与えます。
ただし、「?」を省略した場合それは正しい結果 "One"を与えますが、 "nullability"を失いたくはありません。
回避策として、var en = (Digits?) (int?) obj;を使用していますが、そのようなソリューションの完全な正確性はわかりませんが動作します。

しかし、私はなぜnullable enumへのキャストが最初のケースで失敗するのだろうか?私は次のようにNULL可能なタイプにキャストすることは働くことが期待さ

: - 成功はその後、NULL可能タイプに
をキャストした場合、非NULL可能型にキャスト -
nullが渡された場合、結果はnull同様
だろう。しかしそれは真実ではないようです。

+5

をも参照のhttp:/ /stackoverflow.com/questions/5199419/c-sharp-cast-object-of-type-in​​t-to-nullable-enum – simonalexander2005

答えて

6

と入力しています。intの値です。 int最初に戻ってそれをVHS版:このお試しください

Digits? en = null == obj ? null : (Digits?) (int) obj; 
0

objnullに割り当てることができ

var en = (Digits?) (int) obj; // note "(int)" 

場合は三項演算子を使用することができます

Digits en; 
Enum.TryParse(obj.ToString(), out en); 
+2

wher eはnull可能な列挙型ですか?あなたの答えは質問に合っていましたか? – Xaruth

+1

'Digits en;数字?結果= Enum.TryParse(obj.ToString()、out en)? en:(Digits?)null; ' – Corak

関連する問題