一个或多个参数
本文关键字:参数 一个 | 更新日期: 2023-09-27 17:49:49
我有两种方法:
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
从干净代码的角度来看,这好吗?或者,也许只使用BuildThings并只使用一个Things通过IEnumerable会更好?或者使用params?
谢谢。
你可以做一件事:
BuildThings(params Thing[] things);
使您能够使用:
BuildThings(thing1, thing2, thing3, ...);
我的个人偏好如下
接口:
void Build(Thing thing);
void Build(IEnumerable<Thing> things);
实现:
void Build(Thing thing)
{
Build(new [] { thing });
}
void Build(IEnumerable<Thing> things)
{
//do stuff
}
我更喜欢使用这种模式的原因是,它可以确保您保持DRY状态,同时为您提供多个重载的灵活性,而不像params
那样,您必须将任何不可枚举的数组转换为数组。
params对于您的方法来说不是一个好的解决方案。
我认为只要只有一个实现,就可以有两个或多个方法。
public void BuildThing(Thing a)
{
this.BuildThings(new List<Thing>(){a});
}
您提供的方法似乎是一个很好的实践。当你只构建一个实例而不是多个实例时,你可能会想做不同的事情。
我不会使用params
,因为这会迫使您创建一个数组,例如,如果您有一个列表的话。
纯粹从"干净代码"的角度来看,这是完全可以的。尽管在功能上,替代方案可能更适合你,也可能不适合你。例如,使用params
会强制在调用之前枚举集合,而不是在调用内部延迟枚举。
我会考虑两种情况:
- 有这两个方法,但在
BuildThing(Thing a)
中,我会使用BuildThings(IEnumerable<Thing> things)
,并只使用一个Thing传递IEnumerable - 使用
params
只创建一个方法此选项有一个缺点-如果要传递多个参数,则必须将每个IEnumerable
转换为Array
(当然,数组除外(
我可能会选择params
解决方案。