web-dev-qa-db-ja.com

enum変数のデフォルト値は何ですか

列挙変数、それが常に最初の要素にデフォルト設定されているかどうか誰でも知っていますか?

214
user496949

列挙のメンバーが値0を表すものであれば何でもです。具体的には、 ドキュメント から:

enum Eのデフォルト値は、式(E)0によって生成される値です。

例として、次の列挙型を使用します。

enum E
{
    Foo, Bar, Baz, Quux
}

デフォルト値をオーバーライドせずに、default(E)を出力すると、最初に出現する要素なのでFooが返されます。

ただし、enumの0が最初のメンバーで表されるのは、常にではない場合です。たとえば、これを行う場合:

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

default(F)を印刷すると、Quuxではなく、Fooが表示されます。

列挙型Gのどの要素も0に対応しない場合:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G)は文字通り0を返しますが、その型はGのままです(上記のドキュメントで引用されているように、指定された列挙型へのキャスト)。

343
BoltClock

列挙型の値の順序に依存し、最初の値が常にデフォルトであると想定することは非常に危険だと思います。デフォルト値を保護することを懸念する場合、これは良い習慣です。

enum E
{
    Foo = 0, Bar, Baz, Quux
}

それ以外の場合は、不注意な順序のリファクタリングだけで、まったく異なるデフォルトを使用できます。

9
user3154431