Chaque fois que j'écris une méthode qui prend un paramètre booléen représentant une option, je me trouve penser: "Devrais-je remplacer cela par un énumé qui ferait la lecture des appels de méthode beaucoup plus faciles?".
Considérez la Suite à un objet qui prend un paramètre indique si la mise en œuvre doit utiliser sa version de sécurité de thread-Safe ou non (je ne demande pas ici si ce moyen de le faire est une bonne conception ou non, seule l'utilisation du booléen): p> Lorsque l'appel est à côté de la déclaration, le but du paramètre semble évident évident. Lorsqu'il s'agit dans une bibliothèque tierce partie, vous savez à peine, il est plus difficile de voir immédiatement ce que le code fait, comparé à: p> qui décrit l'intention beaucoup mieux. P> Les choses s'aggravent quand il y a deux paramètres booléens représentant des options. Voir ce qui est arrivé à Bien qu'il semble évident d'utiliser une énumération lorsqu'il y a trois éléments ou plus, quelle est votre opinion et vos expériences en utilisant un énumé à la place un booléen dans ces cas spécifiques? p> p> ObjectContext.Savechanges (BOOL) CODE> Entre Cadre 3.5 et 4.0. Il a été obsolète car une deuxième option a été introduite et le tout a été converti en un énumé. P>
5 Réponses :
Vous pouvez utiliser des paramètres nommés dans C # 4.0:
CreateSomeObject(makeThreadSafe : true);
Il est clair que la deuxième approche est plus lisible sans IDE. EM> Si vous êtes dans VS, vous pouvez utiliser IntelliSense pour groker les paramètres, bien que cela puisse être un peu maladroit parfois. P >
Si vous êtes en C # 4.0, vous pouvez utiliser Paramètres nommés pour que votre intention soit claire. P>
.NET 4.0 pourrait aider ici. Vous pouvez utiliser des paramètres nommés: pour les versions plus anciennes, il peut être utile de créer des variables temporaires à la place. P> bool makeThreadSafe = true;
CreateSomeObject(makeThreadSafe);
Je pense que cela dépendrait de la sémantique de vos méthodes, par exemple votre valeur booléenne représente réellement un booléen? Ou est-il utilisé simplement pour signaler la présence, pas la présence d'une autre chose?
Par exemple: P>
Options.Use32Bit, Options.Use64Bit.
Pour moi, cela dépend de plusieurs choses:
1) qui est plus lisible? p> 2) Et maintenant? P> CreateSomeObject(CreationOptions.MakeThreadSafe, ExtraGoodies.Include, Logging.Disable);
CreateSomeObject(true, false, false);