2008-09-19 132 views

回答

94

它們有完全不同的語義。

AddRange通過向其添加其他項目來修改列表。

Concat返回包含列表和其他項目的新序列,而不修改列表。

選擇具有您想要的語義的人。

+0

所以離子形成緊密的循環,這將是更好的使用添加範圍,而不是失去的性能,因爲所有的內部newing和衝擊的GC? – johnc 2008-09-19 07:22:20

+33

實際上,由於延遲執行,使用的毗連很可能會更快,因爲它避免了* *對象分配 - 的毗連不會複製任何東西,它只是創建的列表之間的聯繫,以便枚舉當你到達一個結束它透明帶你到下一個開始! – 2008-09-19 07:32:02

28

最大的區別是AddRange改變了它所調用的列表,而Concat創建了一個新的List。因此它們有不同的用途。

此外Concat是適用於任何IEnumerable並返回IEnumerable的擴展方法,您需要.ToList()才能生成新的List。

如果要擴展現有列表的內容,請使用AddRange。

如果要創建兩個IEnumerable的來源一個新的列表,然後使用具有的毗連.ToList。這具有不改變任何來源的質量。

如果您只需要枚舉兩個列表(或任何其他IEnumerable)的內容,那麼只需每次使用Concat,這樣做的好處是不會實際分配新內存來保存統一列表。