Chaque fois que j'écris une méthode qui prend un paramètre booléen représentant une option, je me surprends à penser: "Devrais-je le remplacer par une énumération qui ferait lire les appels de méthode? beaucoup plus facile?". Considérons ce qui suit avec un objet qui prend un paramètre indiquant si l'implémentation doit utiliser sa version thread-safe ou non (je ne demande pas ici si cette façon de faire est bonne ou pas, seulement l'utilisation de le booléen):.NET: bool vs enum comme paramètre de méthode
public void CreateSomeObject(bool makeThreadSafe);
CreateSomeObject(true);
Lorsque l'appel est à côté de la déclaration, l'objectif du paramètre semble évidemment évident. Quand il est dans une bibliothèque tierce partie que vous connaissez à peine, il est plus difficile de voir immédiatement ce que le code fait, par rapport à:
public enum CreationOptions { None, MakeThreadSafe }
public void CreateSomeObject(CreationOptions options);
CreateSomeObject(CreationOptions.MakeThreadSafe);
qui décrit l'intention beaucoup mieux. Les choses se détériorent quand il y a deux paramètres booléens représentant des options. Voir ce qui est arrivé à ObjectContext.SaveChanges(bool)
entre Framework 3.5 et 4.0. Il a été rendu obsolète parce qu'une deuxième option a été introduite et l'ensemble a été converti en une énumération.
Bien qu'il semble évident d'utiliser une énumération quand il y a trois éléments ou plus, que pensez-vous et que pensez-vous d'utiliser une énumération à la place d'un booléen dans ces cas précis?