如何解决一个或多个参数
| 我有两种方法:BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
从干净的代码角度来看这很好吗?
还是仅使用BuildThings并仅通过一件Thing传递IEnumerable会更好?还是使用参数?
谢谢。
解决方法
我个人的喜好如下
接口:
void Build(Thing thing);
void Build(IEnumerable<Thing> things);
实施:
void Build(Thing thing)
{
Build(new [] { thing });
}
void Build(IEnumerable<Thing> things)
{
//do stuff
}
我更喜欢使用此模式的原因是因为它确保您保持DRY状态,同时又给您带来了多个重载的灵活性,这不同于“ 3”方式,您必须将任何非数组可枚举转换为数组。
,您可以做一件事:
BuildThings(params Thing[] things);
这使您可以使用:
BuildThings(thing1,thing2,thing3,...);
,params并不是您方法的理想解决方案。
我认为只要有一个实现就可以使用2个或更多方法。
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
解决方案。