2008-09-19 90 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,这样做的好处是不会实际分配新内存来保存统一列表。