2011-10-07 25 views
7

Mi scuso in anticipo perché sono sicuro che qualcuno deve averlo chiesto prima, ma non riesco a trovarlo.Enum, valori sovrapposti, C#

Appena avuto una sorpresa, io e un collega abbiamo aggiunto lo stesso valore per un enum, e questo è stato compilato, ad es.

enum MyEnum 
    { 
    mine = 1, 
    his = 1 
    } 

Sembra che anche C/C++ supporti questo (?). Qualche motivo per questo comportamento, in tutti i casi in cui è utile? Ho visto un caso di differenza lingue umane (uno = 1, Eins = 1, ecc), ma io non sono convinto

Grazie

+0

Così che forse si potrebbe fare questo enum MyEnum '{ [obsoleto] miniera = 1, suo = 1 }' – V4Vendetta

+0

Presumibilmente, se si stanno facendo i valori espliciti si * cura * su ciò che questi valori sono, quindi tali conflitti non dovrebbero verificarsi. Se non ti interessa il valore che ciascun membro rappresenta, puoi semplicemente non renderlo esplicito e non si verificheranno conflitti. –

risposta

8

Prendiamo un semplice esempio

enum PrivilegeLevel 
{ 
    None, 
    Reporter, 
    Reviewer, 
    Admin, 
    DefaultForNewUser = None, 
    DefaultForProjectOwner = Reviewer, 
}; 
+0

Sembra una cattiva idea a causa della semantica di costanti della versione binaria. – CodesInChaos

+0

Cosa intendi con la semantica della versione delle costanti? – crazyjul

+0

Le costanti @crazyjul non possono essere versionate. Se cambi una costante (vedi, questo è un ossimoro), tutti gli assembly che ne hanno fatto uso sono ora danneggiati perché usano ancora il vecchio valore. Non cambieresti il ​​valore di pi, vero? Ma potresti voler cambiare i livelli di privilegio di default. –

0

L'idea dietro i tipi enumerati si creano nuovi tipi di dati che possono assumere solo un> intervallo di valori limitato.

Quello che hai fatto è legale e il compilatore non dovrebbe dare alcun errore dato che enum rappresenta solo una costante. Stai dando il tuo costante nome logico.

È possibile assegnare gli stessi valori a due o più costanti enum quando è necessario separare le costanti nominate. Supponiamo che tu abbia una combinazione di colori che utilizzano entrambi lo stesso colore di base, ma gli schemi devono essere separati logicamente. Quindi puoi usare gli stessi valori per le costanti enum. Ma ci sono ancora modi migliori per farlo.

+1

"Se si assegna lo stesso valore a due o più costanti enum, l'intero scopo dell'enumerazione viene diminuito." Non sono d'accordo. L'intero scopo dell'enumerazione è di farti usare nomi invece di numeri magici. Non vedo come avere due nomi con lo stesso numero magico sia cattivo. –

+0

@ R.MartinhoFernandes: sono pienamente d'accordo con il tuo disaccordo. Ci sono volte in cui gli alias sono una buona cosa. –

+0

Suppongo che non sia peggio di un typedef C++, appena sorpreso al momento – tony