Cada vez que escribo un método que toma un parámetro booleano que representa una opción, me encuentro pensando: "¿Debería reemplazar esto por una enumeración que haría leer las llamadas al método? ¿más fácil?"..NET: bool vs enum como un parámetro de método
Considere lo siguiente con un objeto que toma un parámetro que indica si la implementación debe usar su versión segura para subprocesos o no (no pregunto si esta manera de hacerlo es buena o no, solo el uso de el booleano):
public void CreateSomeObject(bool makeThreadSafe);
CreateSomeObject(true);
Cuando la llamada está al lado de la declaración de la finalidad del parámetro parece obvio, por supuesto. Cuando está en alguna biblioteca de terceros que apenas conoce, es más difícil de ver de inmediato lo que hace el código, en comparación con:
public enum CreationOptions { None, MakeThreadSafe }
public void CreateSomeObject(CreationOptions options);
CreateSomeObject(CreationOptions.MakeThreadSafe);
que describe la intención mucho mejor.
Las cosas empeoran cuando hay dos parámetros booleanos que representan las opciones. Vea lo que pasó con ObjectContext.SaveChanges(bool)
entre Framework 3.5 y 4.0. Se ha quedado obsoleto porque se ha introducido una segunda opción y todo se ha convertido en una enumeración.
Si bien parece obvio utilizar una enumeración cuando hay tres elementos o más, ¿cuál es su opinión y experiencia sobre el uso de una enumeración en lugar de una booleana en estos casos específicos?