Перечислимая переменная, кто-нибудь знает, всегда ли она по умолчанию не соответствует первому элементу?
Что является значением по умолчанию для переменной перечисления
Ответ 1
Это то, что член перечисления представляет значение 0
. В частности, из документации:
Значение по умолчанию
enum E
- это значение, выражаемое выражением(E)0
.
В качестве примера сделаем следующее перечисление:
enum E
{
Foo, Bar, Baz, Quux
}
Без переопределения значений по умолчанию печать default(E)
возвращает Foo
, поскольку это первый элемент.
Однако не всегда бывает, что 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
(как указано в документах выше, приведение к указанному типу перечисления).
Ответ 2
Я думаю, что довольно опасно полагаться на порядок значений в перечислении и предположить, что первый всегда является значением по умолчанию. Это будет хорошей практикой, если вы обеспокоены защитой значения по умолчанию.
enum E
{
Foo = 0, Bar, Baz, Quux
}
В противном случае все, что требуется, это неосторожный рефакторинг заказа, и у вас есть совершенно другой по умолчанию.