Ogni volta che sto scrivendo un metodo che accetta un parametro booleano che rappresenta un'opzione, mi trovo a pensare: "dovrei sostituirlo con un enum che renderebbe la lettura del metodo chiamate molto più facile?"..NET: bool vs enum come parametro metodo
Considerare quanto segue con un oggetto che accetta un parametro che indica se l'implementazione deve utilizzare la sua versione thread-safe o no (non sto chiedendo qui se questo modo di fare questo è un buon design o no, solo l'uso di il booleano):
public void CreateSomeObject(bool makeThreadSafe);
CreateSomeObject(true);
Quando la chiamata è accanto alla dichiarazione, lo scopo del parametro sembra ovviamente ovvio. Quando è in qualche libreria di terze parti si conosce a malapena, è più difficile vedere subito cosa fa il codice, rispetto a:
public enum CreationOptions { None, MakeThreadSafe }
public void CreateSomeObject(CreationOptions options);
CreateSomeObject(CreationOptions.MakeThreadSafe);
che descrive l'intento di gran lunga migliore.
Le cose peggiorano quando ci sono due parametri booleani che rappresentano le opzioni. Scopri cosa è successo a ObjectContext.SaveChanges(bool)
tra Framework 3.5 e 4.0. È stato reso obsoleto perché è stata introdotta una seconda opzione e il tutto è stato convertito in enum.
Mentre sembra ovvio usare un'enumerazione quando ci sono tre elementi o più, qual è la tua opinione e le tue esperienze sull'uso di un enumerico invece di un booleano in questi casi specifici?