2009-03-06 3 views

答えて

20

C#では、Javaと異なり、列挙型はチェックされません。基になる型の値を持つことができます。これがあなたの入力を確認することが非常に重要な理由です。

if(!Enum.IsDefined(typeof(MyEnum), value)) 
    throw new ArgumentOutOfRangeException(); 
+1

私はJava開発者(LINQ!)として長く知っているC#のいくつかの機能がありますが、ここではJavaが本当に正しくなっています。 –

+0

@saua:必ずしもそうではありません。これらは、このアプローチの利点と欠点です。 –

+0

この点の主な利点は、[Flags]属性でマークする必要がある値を組み合わせることができることです。 –

1

enumはintに基づいているため、intにできる値はすべて受け入れることができます。コンパイラに明示的に(キャスティングによって)4をエニュメントにキャストしても問題ないと伝えているので、それはそうです。

1

各列挙型には、表現に使用される基礎となる数値型(intなど)があります。値に名前がない場合でも、列挙型が持つ可能性のある値です。

1

他人が言っていないこと:キャスティングでは、自分が行っていることを知っていることをコンパイラに伝えます。だからあなたが言うなら、これをenum値として扱います。他のポスターは、たとえあなたが何をやっているのかを知っていても、C#コンパイラは多くの悪いことを許さないので、これがなぜ許されているのかを指摘しました。

フラグ値をintとして保存できないため、値が許可されていないと本当に悪いです。または、intが許容される組み合わせの1つであるかどうかをチェックする必要がありました。フラグの列挙型(値を一緒に使用できる)を使用すると、多くの場合があります。

関連する問題