Uma variável enum, alguém sabe se é sempre o padrão para o primeiro elemento?
Uma variável enum, alguém sabe se é sempre o padrão para o primeiro elemento?
Respostas:
É o membro da enumeração que representa o valor 0
. Especificamente, a partir da documentação :
O valor padrão de um
enum E
é o valor produzido pela expressão(E)0
.
Como exemplo, considere a seguinte enumeração:
enum E
{
Foo, Bar, Baz, Quux
}
Sem substituir os valores padrão, a impressão default(E)
retorna, Foo
pois é o elemento que ocorre pela primeira vez.
No entanto, nem sempre é o caso 0
de um enum é representado pelo primeiro membro. Por exemplo, se você fizer isso:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
Imprimir default(F)
lhe dará Quux
, não Foo
.
Se nenhum dos elementos em uma enumeração G
corresponder a 0
:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)
retorna literalmente 0
, embora seu tipo permaneça como G
(conforme citado pelos documentos acima, uma conversão para o tipo de enumeração especificado).
'\0'
ou default(char)
, o que é altamente improvável, pois default(char)
é o personagem NUL que corresponde ao código de caractere 0.
DefaultValue
atributo - algo como System.ComponentModel.DefaultValue(MyEnum.Blah)
- modificaria o comportamento de, default(MyEnum)
mas ainda produzirá 0. Não há como criar uma abstração para um enum
valor em torno de seu padrão?
Eu acho que é muito perigoso confiar na ordem dos valores em uma enumeração e assumir que o primeiro é sempre o padrão. Isso seria uma boa prática se você estiver preocupado em proteger o valor padrão.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Caso contrário, basta um refator descuidado do pedido e você terá um padrão completamente diferente.
Foo
depois de Bar
ambos Foo
e Bar
terá o valor 0 e E.Foo == E.Bar
retornará true
. É tão estúpido e contra-intuitivo, mas é verdade :(