A meno che tu non abbia una buona ragione per usare i valori grezzi, dovresti sempre e solo usare valori impliciti e fare riferimento a loro con Status.Active
e Status.Inactive
.
Il problema è che potresti voler archiviare i dati in un file flat o DB, oppure utilizzare un file flat o DB creato da qualcun altro. Se lo fai tu stesso, fallo in modo che la numerazione si adatti a ciò per cui Enum è usato.
Se i dati non sono tuoi, ovviamente vorrai usare qualunque cosa il dev originale abbia usato come schema di numerazione.
Se stai pensando di usare l'Enum come un set di flag, c'è una semplice convenzione che vale la pena seguire:
enum Example
{
None = 0, // 0
Alpha = 1 << 0, // 1
Beta = 1 << 1, // 2
Gamma = 1 << 2, // 4
Delta = 1 << 3, // 8
Epsilon = 1 << 4, // 16
All = ~0, // -1
AlphaBeta = Alpha | Beta, // 3
}
I valori dovrebbero essere potenze di due e possono essere espressi usando operazioni di bit-shift. None
, ovviamente dovrebbe essere 0
, ma All
è meno ovviamente -1
. ~0
è la negazione binaria di 0
e risulta in un numero su cui è impostato ogni bit 1
, che rappresenta un valore di-1
. Per i flag composti (spesso usati per comodità) altri valori possono essere uniti usando bit per bit o operatore |
.