2011-11-24 12 views
4

「0」:それはUser.Flagのように思えるので、列挙型と値を持つノーフィールド、私は次のテストコードを作った

​​

値はnullを次のようになります。私はこのような使用

public enum Test 
{ 
    One = 1, 
    Two = 2 
} 
public class User 
{ 
    public Test Flag { get; set; } 
} 

0で初期化されます。何故ですか? 0は私のenumの有効な値ではありません。最初の有効な値(1)で初期化してはいけませんか?

+0

この回答を参照してください書く必要があります。http://stackoverflow.comを/ q/1165414/25727 – Jan

+0

[Enum(C#)の初期値に関する質問]の可能な複製(http://stackoverflow.com/questions/1165402/question-on-initial-value-of-an-enum-c ) – jgauffin

+0

@Jan:ありがとう。それを見なかった他の質問が列挙型の値を定義していないので(つまり、最初の項目は '0'の値を持つため)、重複しているわけではありません。 – jgauffin

答えて

2

列挙型は、整数型でサポートされ、それらのように(ほとんど)動作します。

残念ながら、には、基礎となるタイプで有効な値を列挙型に割り当てることができます。つまり、チェックはありません。

デフォルトの初期化の場合、それは基本タイプのデフォルト値となり、整数タイプの場合は0となります。

あなたにもこれを行うことができ、それがコンパイルして実行します:

Enumクラスが動作するようにいくつかの便利なメソッドがあります。おそらく、次のようにあなたの列挙型を再定義する

var value = (Test)43; 

を変数が列挙の定義された値を保持しているかどうかを調べるには、IsDefinedのようなenumを使用します。

2

デフォルトタイプの初期値はintで、default(int)0です。 (カスタム基になる型が、enum CustomEnum : byteのような唯一のプリミティブ数値を指定することができます)

1

列挙型の基になる型はデフォルトでintタイプで、デフォルト値は明らかに0ある

1.10列挙型、C#の仕様:

それぞれの列挙型には、対応する整数型があり、基底型 という列挙型の型と呼ばれます。 の基になる型を明示的に宣言していない列挙型は、基になるint型を持ちます。列挙型の 格納形式と可能な値の範囲は、基になる型の によって決まります。列挙型が取り得る値のセットは、その列挙型メンバーによって制限されていない です。特に、列挙型の基礎となる型のいずれかの値は、列挙型にキャストでき、 という異なる列挙型の有効な値です。

-1

GetFieldプロパティ名の名前を取り、あなたがuser.Flag

の列挙型の値を渡しているあなたは

var value = (Test) typeof(Test).GetField("Flag").GetValue(user); 
+0

コードを試してください... – jgauffin

+0

ありがとうございます。私はその質問を誤解した。 –

+0

他の3つの回答はあなたにヒントを与えているはずでした;) – jgauffin

関連する問題