Il n'y a pas de raisons très claires pour lesquelles utiliser ce type de syntaxe en premier lieu.
En général, essayez d'éviter d'avoir des arguments booléens qui à distance peuvent sembler arbitraires. includeManagementaffectera (très probablement) le résultat. Mais l'argument semble avoir «peu de poids».
L'utilisation d'une énumération a été discutée, non seulement elle ressemblera à l'argument "porte plus de poids", mais elle fournira également une évolutivité à la méthode. Cela pourrait cependant ne pas être la meilleure solution dans tous les cas, car votre ReturnEmployeeIdsméthode devra évoluer parallèlement au WhatToInclude-enum (voir la réponse de NiklasJ ). Cela pourrait vous donner mal à la tête plus tard.
Considérez ceci: si vous WhatToIncludemodifiez l'échelle -enum, mais pas la ReturnEmployeeIdsméthode -méthode. Il pourrait alors jeter un ArgumentOutOfRangeException(meilleur cas) ou retourner quelque chose de complètement indésirable ( nullou un vide List<Guid>). Ce qui dans certains cas peut dérouter le programmeur, surtout si vous ReturnEmployeeIdsêtes dans une bibliothèque de classes, où le code source n'est pas facilement disponible.
On supposera que WhatToInclude.Traineescela fonctionnera si WhatToInclude.Allcela fonctionne, étant donné que les stagiaires sont un "sous-ensemble" de tous.
Cela dépend (bien sûr) de la façon dont il ReturnEmployeeIds est mis en œuvre.
Dans les cas où un argument booléen pourrait être transmis, j'essaie plutôt de le diviser en deux méthodes (ou plus, si nécessaire), dans votre cas; on pourrait extraire ReturnAllEmployeeIds, ReturnManagementIdset ReturnRegularEmployeeIds. Cela couvre toutes les bases et est absolument explicite à quiconque le met en œuvre. Cela n'aura pas non plus le problème de "mise à l'échelle" mentionné ci-dessus.
Puisqu'il n'y a que deux résultats pour quelque chose qui a un argument booléen. La mise en œuvre de deux méthodes nécessite très peu d'efforts supplémentaires.
Moins de code, c'est rarement mieux.
Cela dit, il existe certains cas où la déclaration explicite de l'argument améliore la lisibilité. Considérez par exemple. GetLatestNews(max: 10). GetLatestNews(10)est encore assez explicite, la déclaration explicite de maxcontribuera à dissiper toute confusion.
Et si vous devez absolument avoir un argument booléen, quel usage ne peut pas être déduit en lisant simplement trueou false. Alors je dirais que:
var ids = ReturnEmployeeIds(includeManagement: true);
.. est absolument meilleur et plus lisible que:
var ids = ReturnEmployeeIds(true);
Puisque dans le deuxième exemple, le truepourrait signifier absolument n'importe quoi . Mais j'essaierais d'éviter cet argument.
booleanarguments de méthode, et comment?