.NET List <T> Concat与AddRange

时间:2020-03-06 14:24:58  来源:igfitidea点击:

通用列表上的AddRange和Concat函数之间有什么区别?是否推荐其中一个?

解决方案

它们具有完全不同的语义。

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

Concat返回一个包含列表和其他项的新序列,而无需修改列表。

选择具有我们想要的语义的任何一个。

最大的区别是AddRange会对其进行调用的列表进行变异,而Concat会创建一个新的List。因此它们有不同的用途。

另外,Concat是一种扩展方法,适用于任何IEnumerable并返回IEnumerable,我们需要一个.ToList()来生成一个新的List。

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

如果要从两个IEnumerable源创建一个新列表,则将Concat与.ToList一起使用。这具有不改变任何一个来源的质量。

如果我们只需要枚举两个列表(或者任何其他IEnumerable)的内容,则每次都只需使用Concat,这样做的好处是实际上没有分配新的内存来保存统一列表。