一个或多个参数

本文关键字:参数 一个 | 更新日期: 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会强制在调用之前枚举集合,而不是在调用内部延迟枚举。

我会考虑两种情况:

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

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