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, Foopois é o elemento que ocorre pela primeira vez.
No entanto, nem sempre é o caso 0de 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 Gcorresponder 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.
DefaultValueatributo - 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 enumvalor 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.
Foodepois de Barambos Fooe Barterá o valor 0 e E.Foo == E.Barretornará true. É tão estúpido e contra-intuitivo, mas é verdade :(