6
votes

.NET: BOOL vs Enum comme un paramètre de méthode

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): xxx

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é à: xxx

qui décrit l'intention beaucoup mieux.

Les choses s'aggravent quand il y a deux paramètres booléens représentant des options. Voir ce qui est arrivé à ObjectContext.Savechanges (BOOL) 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é.

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?


0 commentaires

5 Réponses :


1
votes

Vous pouvez utiliser des paramètres nommés dans C # 4.0:

CreateSomeObject(makeThreadSafe : true);


0 commentaires

1
votes

Il est clair que la deuxième approche est plus lisible sans IDE. Si vous êtes dans VS, vous pouvez utiliser IntelliSense pour groker les paramètres, bien que cela puisse être un peu maladroit parfois.

Si vous êtes en C # 4.0, vous pouvez utiliser Paramètres nommés pour que votre intention soit claire.


0 commentaires

7
votes

.NET 4.0 pourrait aider ici. Vous pouvez utiliser des paramètres nommés: xxx pré>

pour les versions plus anciennes, il peut être utile de créer des variables temporaires à la place. P>

bool makeThreadSafe = true;
CreateSomeObject(makeThreadSafe);


0 commentaires

2
votes

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.


0 commentaires

2
votes

Pour moi, cela dépend de plusieurs choses:

  1. lisibilité li>
  2. Le nombre de paramètres booléens passés à la méthode li>
  3. la chance que je pourrais avoir besoin de plus que vrais / faux li> ol>

    1) qui est plus lisible? p> xxx pré>

    2) Et maintenant? P>

    CreateSomeObject(CreationOptions.MakeThreadSafe, ExtraGoodies.Include, Logging.Disable);
    CreateSomeObject(true, false, false);
    


0 commentaires