列挙変数、それが常に最初の要素にデフォルト設定されているかどうか誰でも知っていますか?
列挙のメンバーが値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
のままです(上記のドキュメントで引用されているように、指定された列挙型へのキャスト)。
列挙型の値の順序に依存し、最初の値が常にデフォルトであると想定することは非常に危険だと思います。デフォルト値を保護することを懸念する場合、これは良い習慣です。
enum E
{
Foo = 0, Bar, Baz, Quux
}
それ以外の場合は、不注意な順序のリファクタリングだけで、まったく異なるデフォルトを使用できます。