.NET List <T> Concat与AddRange

generics列表上的AddRange和Concat函数有什么区别? 是另一个build议吗?

他们有完全不同的语义。

AddRange通过添加其他项目来修改列表。

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

select你想要的语义。

最大的不同在于AddRange改变了它所调用的列表,而Concat创build了一个新的List。 因此它们有不同的用途。

Concat也是一种扩展方法,适用于任何IEnumerable,并且返回一个IEnumerable,你需要一个.ToList()来产生一个新的List。

如果要扩展现有列表的内容,请使用AddRange。

如果您要从两个IEnumerable源创build一个新列表,请使用Concat和.ToList。 这具有不改变任何来源的质量。

如果您只需枚举两个列表(或任何其他IEnumerable)的内容,那么只需每次使用Concat,这样做的好处是不会实际分配新内存来保存统一列表。