Una variabile enum, qualcuno sa se è sempre predefinito al primo elemento?
Una variabile enum, qualcuno sa se è sempre predefinito al primo elemento?
Risposte:
Indipendentemente dal membro dell'enumerazione, rappresenta il valore 0. In particolare, dalla documentazione :
Il valore predefinito di an
enum Eè il valore prodotto dall'espressione(E)0.
Ad esempio, prendi il seguente enum:
enum E
{
Foo, Bar, Baz, Quux
}
Senza sovrascrivere i valori predefiniti, la stampa default(E)ritorna Foopoiché è il primo elemento ricorrente.
Tuttavia, non è sempre il caso che 0un enum sia rappresentato dal primo membro. Ad esempio, se lo fai:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
La stampa default(F)ti darà Quux, non è Foo.
Se nessuno degli elementi in un enum Gcorrisponde a 0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)ritorna letteralmente 0, sebbene il suo tipo rimanga come G(come citato dai documenti sopra, un cast per il tipo enum dato).
'\0'o default(char), il che è altamente improbabile poiché default(char)è il carattere NUL che corrisponde al codice char 0.
DefaultValuedell'attributo - qualcosa di simile - System.ComponentModel.DefaultValue(MyEnum.Blah)avrebbe modificato il comportamento di default(MyEnum)ma produce ancora 0. Non c'è modo di creare un'astrazione per un enumvalore intorno al suo valore predefinito?
Penso che sia abbastanza pericoloso fare affidamento sull'ordine dei valori in un enum e supporre che il primo sia sempre il valore predefinito. Questa sarebbe una buona pratica se sei preoccupato di proteggere il valore predefinito.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Altrimenti, tutto ciò che serve è un rifattore incurante dell'ordine e hai un valore di default completamente diverso.
Foodopo Barentrambi Fooe Baravrai un valore di 0 e E.Foo == E.Bartornerà true. È così stupido e controintuitivo ma è vero :(