没有什么超级清楚的理由可以说明为什么要首先使用这种语法。
通常,请尝试避免使用布尔参数,以使布尔参数看起来是任意的。includeManagement
(最有可能)将极大地影响结果。但是论点似乎带有“很小的分量”。
已经讨论了枚举的使用,不仅看起来像参数“承担更多的重量”,而且还为该方法提供了可伸缩性。但是,这可能并不是所有情况下的最佳解决方案,因为您的ReturnEmployeeIds
-方法必须与WhatToInclude
-enum 一起扩展(请参见NiklasJ的答案)。稍后可能会让您头疼。
请考虑以下事项:如果缩放WhatToInclude
-enum,而不是ReturnEmployeeIds
-method。然后,它可能会抛出ArgumentOutOfRangeException
(最佳情况)或返回完全不需要的内容(null
或为空List<Guid>
)。在某些情况下,这可能会使程序员ReturnEmployeeIds
感到困惑,特别是如果您在类库中,而源代码不容易获得。
看到受训者是所有人的“子集” ,WhatToInclude.Trainees
就可以假设这样做是WhatToInclude.All
可行的。
(确实),这取决于如何 ReturnEmployeeIds
实现。
在可以传递布尔参数的情况下,根据您的情况,我尝试将其分解为两个方法(如果需要,可以分为两个方法);有人可能会提取ReturnAllEmployeeIds
,ReturnManagementIds
和ReturnRegularEmployeeIds
。这涵盖了所有基础,并且对于实施它的任何人都是绝对不言自明的。这也将没有上面提到的“缩放”问题。
因为具有布尔参数的事物只有两个结果。实现两种方法几乎不需要额外的工作。
更少的代码,很少更好。
与此说,也有一些情况下,显式声明的参数提高了可读性。考虑一下。GetLatestNews(max: 10)
。GetLatestNews(10)
是仍然不言自明,的明确声明max
将有助于消除任何混乱。
而且,如果您绝对必须具有布尔参数,则不能仅通过阅读true
或来推断出哪种用法false
。然后我会说:
var ids = ReturnEmployeeIds(includeManagement: true);
..绝对比:
var ids = ReturnEmployeeIds(true);
因为在第二个示例中,true
可能绝对没有任何意义。但是我会尽量避免这种争论。
boolean
方法参数吗?