一个参数还是多个参数

12

我有两种方法:

BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);

从代码的规范性角度来看,这样做好吗?或者使用 BuildThings 并传递只有一个 Thing 的 IEnumerable 更好吗?还是使用 params?

谢谢。

6个回答

20

有一件事情你可以做:

BuildThings(params Thing[] things);

这使您能够使用:

BuildThings(thing1, thing2, thing3, ...);

10

我的个人偏好如下:

界面:

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方式,你必须将任何非数组可枚举转换为数组。

2

在你的方法中,params不是一个好的解决方案。

我认为只要你有一个实现,就可以拥有2个或更多的方法,这样也是可以的。

public void BuildThing(Thing a)
{
    this.BuildThings(new List<Thing>(){a});
}

1

你提供的方法看起来是一个好的实践。当你只构建单个实例而不是多个实例时,可能会有不同的事情要做。

我不会使用params,因为这会强制你创建一个数组,如果你有一个列表的话。


0
从“清洁代码”的角度来看,这是完全可以的。尽管在功能上,替代方案可能更适合您,也可能不适合您。例如,使用params会强制在调用之前枚举集合,而不是在调用内部进行惰性枚举。

0

我会考虑两种情况:

  1. 有这两种方法,但在 BuildThing(Thing a) 中,我将使用 BuildThings(IEnumerable<Thing> things) 并传递只有一个 Thing 的 IEnumerable
  2. 创建一个带 params 的方法。这个选项有一个缺点-如果要传递多个参数,则必须将每个 IEnumerable 转换为 Array(当然除了数组)。

我可能会选择 params 解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接