2012-02-07 22 views
6

In C#, i flag enum devono essere sequenziali? o puoi lasciare delle lacune? e ancora eseguire confronti a bit-saggio? vale a dire, si può procedere come segue:I flag enum C# devono essere sequenziali

[Flags] 
public enum MyEnum 
{ 
    None = 0, 
    IsStarred = 1, 
    IsDone = 128 
} 
+1

Sembra impeccabile per me. – Marlon

+10

Cosa ti dice il tuo compilatore? – yoozer8

risposta

5

Non c'è niente di sbagliato nel codice che hai pubblicato. Questo è assolutamente bene:

[Flags] 
public enum MyEnum 
{ 
    None = 0, 
    IsStarred = 1, 
    IsDone = 128 
} 

E così è questo:

[Flags] 
public enum MyEnum 
{ 
    IsStarred = 1, 
    IsDone = 128 
    None = 0, 
    SomethingElse = 4, 
} 

Basta ricordare che il FlagsAttribute non fa rispettare i valori di essere maschere di bit.

+0

Infatti, non c'è nulla che ti impedisca di assegnare un valore enum non definito (come un intero) a una variabile enum. – Oded

+0

E si possono ancora eseguire operazioni bit-bit su di loro, nessun problema, giusto? –

7

Non c'è nulla che impone loro di essere sequenziale.

La definizione enum è valida e verrà compilata senza problemi.

La questione della leggibilità e il principio di minima sorpresa, però sono stati notevolmente compromessa ...

4

tale requisito. Quello che hai va bene, assumendo che tu abbia capitalizzato [Flags].

3

Sì, lo puoi fare. Tocca a voi.

4

Non devono essere sequenziali.

1

No, non devono essere sequenziali. Compilare il codice e vederlo di persona

1

Non solo si può fare, ma si può anche fare questo:

public enum MyEnum 
{ 
    None, 
    IsStarred, 
    IsDone = 128 
} 

o

public enum MyEnum 
{ 
    None = 5, 
    IsStarred, 
    IsDone = 128 
} 

Ecco un link per ulteriori esempi: http://www.dotnetperls.com/enum

Problemi correlati