Gli enum sono insiemi di valori costanti utilizzati per rendere il codice più leggibile ed evitare l'uso di valori fissi nel codice oppure di variabili costanti. Vi sono due tipi di enum, quelli semplici, i cui valori possono essere utilizzati solo singolarmente e non in combinazione tra loro, e quelli di tipo Flag che invece possono essere messi in relazione tra loro attraverso operatori booleani.
àˆ buona norma utilizzare sempre gli enumeratori per tipizzare fortemente parametri, proprietà e valori di ritorno dei membri che rappresentino insiemi di valori. A tal scopo è preferibile usare gli enum al posto delle costanti statiche. Ad esempio è sconsigliato fare una cosa del genere:
public static class RGBColor { public static int Red = 1; public static int Green = 2; public static int Blue = 3; }
Invece è preferibile creare un enum:
public enum RGBColor { Red, Green, Blue }
Evitare di utilizzare gli enum per rappresentare insiemi aperti, ovvero insiemi i cui elementi possono variare di numero nel tempo. Ad esempio, evitare di creare un enumeratore per rappresentare le versioni di un sistema operativo. La modifica di un enum infatti può causare interruzioni con il codice già esistente.
Non definire elementi di un enum per un utilizzo futuro, ovvero elementi che al momento non vengono utilizzati ma che si creano per permettersi in futuro un eventuale espansione dell'insieme. Piuttosto in questa eventualità , creare un secondo enum e creare nuovi membri che utilizzano questo secondo enumeratore.
Evitare anche di creare enum con un unico valore.
Non utilizzare i cosiddetti valori sentinel negli enum in quanto questi, definendo i limiti dell'enumeratore, non sono in realtà un valore valido utilizzabile e quindi può essere fonte di problemi.
Per le enumerazioni più semplici è possibile definire un elemento None che indichi l'assenza di valore o valore zero.
I nomi degli enum sono al singolare nel caso degli enum semplici, mentre al plurare nel caso di enum di tipo Flag. Non è consigliato estendere direttamente il tipo System.Enum.