2011-04-13 55 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解決方案。

相關問題