我有兩種方法:一個參數或多個
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
這是從一個乾淨的代碼點好? 或者,也許它會更好地使用BuildThings並通過IEnumerable只有一件事?或使用參數?
謝謝。
我有兩種方法:一個參數或多個
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
這是從一個乾淨的代碼點好? 或者,也許它會更好地使用BuildThings並通過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而給你多重過載的靈活性,不像params
的方式,你必須轉換任何非數組枚舉爲一個數組。
純粹從「乾淨的代碼」的角度來看,這完全沒問題。雖然功能上的替代品可能會或可能不適合你更好。例如,使用params
強制在調用之前枚舉集合,而不是在調用內部懶洋洋地列舉。
有一兩件事可以做:
BuildThings(params Thing[] things);
它使您能夠使用:
BuildThings(thing1, thing2, thing3, ...);
PARAMS不會是你的方法很好的解決方案。
我認爲只要你有一個實現,就可以擁有2個或更多的方法。
public void BuildThing(Thing a)
{
this.BuildThings(new List<Thing>(){a});
}
您提供的方法看起來是一種很好的做法。當您僅構建單個實例而不是多個實例時,可能會有不同的事情要做。
我不會使用params
,因爲這會強制您創建一個數組,例如,如果您有一個列表。
我會考慮兩種情況:
BuildThing(Thing a)
我會用BuildThings(IEnumerable<Thing> things)
,並通過IEnumerable的只有一件事params
此選項有一個缺點 - 如果要傳遞多個參數,則必須將每個IEnumerable
轉換爲Array
(當然數組除外)。我可能會用params
解決方案。