Перечислимая переменная, кто-нибудь знает, всегда ли она по умолчанию не соответствует первому элементу?
Что является значением по умолчанию для переменной перечисления
Ответ 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
}
В противном случае все, что требуется, это неосторожный рефакторинг заказа, и у вас есть совершенно другой по умолчанию.
