Non ci sono ragioni super chiare per cui utilizzare questo tipo di sintassi in primo luogo.
In generale, cerca di evitare di avere argomenti booleani che a distanza possano sembrare arbitrari. includeManagement(molto probabilmente) influenzerà notevolmente il risultato. Ma l'argomento sembra avere un "piccolo peso".
È stato discusso l'uso di un enum, non solo sembrerà che l'argomento "abbia più peso", ma fornirà anche scalabilità al metodo. Questa potrebbe tuttavia non essere la soluzione migliore in tutti i casi, poiché il tuo ReturnEmployeeIdsmetodo dovrà ridimensionarsi insieme al WhatToInclude-enum (vedi la risposta di NiklasJ ). Questo potrebbe farti venire il mal di testa in seguito.
Considera questo: se ridimensioni l' WhatToIncludeenum, ma non il ReturnEmployeeIdsmetodo. Potrebbe quindi lanciare un ArgumentOutOfRangeException(miglior caso) o restituire qualcosa di completamente indesiderato ( nullo vuoto List<Guid>). Il che in alcuni casi potrebbe confondere il programmatore, specialmente se sei ReturnEmployeeIdsin una libreria di classi, dove il codice sorgente non è prontamente disponibile.
Si supporrà che WhatToInclude.Traineesfunzionerà se WhatToInclude.Allfunziona, visto che i tirocinanti sono un "sottoinsieme" di tutti.
Questo (ovviamente) dipende da come ReturnEmployeeIds viene implementato.
Nei casi in cui un argomento booleano potrebbe essere passato, provo invece a suddividerlo in due metodi (o più, se necessario), nel tuo caso; si potrebbe estrarre ReturnAllEmployeeIds, ReturnManagementIdse ReturnRegularEmployeeIds. Questo copre tutte le basi ed è assolutamente autoesplicativo per chiunque lo attui. Anche questo non avrà il "ridimensionamento", di cui sopra.
Dal momento che ci sono solo due risultati per qualcosa che ha un argomento booleano. L'implementazione di due metodi richiede pochissimi sforzi extra.
Meno codice, raramente è meglio.
Detto questo, ci sono alcuni casi in cui dichiarare esplicitamente l'argomento migliora la leggibilità. Considera ad esempio. GetLatestNews(max: 10). GetLatestNews(10)è ancora abbastanza autoesplicativo, la dichiarazione esplicita di maxaiuterà a chiarire qualsiasi confusione.
E se devi assolutamente avere un argomento booleano, quale uso non può essere dedotto solo leggendo trueo false. Quindi direi che:
var ids = ReturnEmployeeIds(includeManagement: true);
.. è assolutamente migliore e più leggibile di:
var ids = ReturnEmployeeIds(true);
Dal momento che nel secondo esempio, truepotrebbe significare assolutamente qualsiasi cosa . Ma proverei a evitare questo argomento.
booleanargomenti del metodo e come?