一个或多个参数

| 我有两种方法:
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
解决方案。     

要回复问题请先登录注册