2011-04-13 104 views
6

我有两种方法:一个参数或多个

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

这是从一个干净的代码点好? 或者,也许它会更好地使用BuildThings并通过IEnumerable只有一件事?或使用参数?

谢谢。

回答

6

我个人的偏好是如下

接口:

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

0

纯粹从“干净的代码”的角度来看,这完全没问题。虽然功能上的替代品可能会或可能不适合你更好。例如,使用params强制在调用之前枚举集合,而不是在调用内部懒洋洋地列举。

5

有一两件事可以做:

BuildThings(params Thing[] things); 

它使您能够使用:

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

PARAMS不会是你的方法很好的解决方案。

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

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

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

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

0

我会考虑两种情况:

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

我可能会用params解决方案。

相关问题