它们具有完全不同的语义。
AddRange通过将其他项添加到列表中来修改列表。
Concat返回一个包含列表和其他项的新序列,而不会修改列表。
选择具有所需语义的任何一个。
AddRange
会直接对调用它的列表进行改变,而 Concat
则创建一个新的列表。因此,它们具有不同的用途。
Concat
是一个扩展方法,适用于任何 IEnumerable<T>
,返回一个 IEnumerable<T>
,需要使用 .ToList()
将其转换为新的列表。
如果您想扩展现有列表的内容,请使用 AddRange
。
如果您要从两个 IEnumerable<T>
源创建一个新列表,则使用带有 .ToList
的 Concat
。这样可以避免改变任意一个源。
如果您只需要枚举两个列表(或任何其他 IEnumerable)的内容,则每次都简单地使用 Concat
,这样可以不必分配新的内存来保存合并后的列表。
List<KeyValuePair<string, string>>
对象进行100次连接/添加操作时的Concat
和AddRange
方法。测试结果表明,AddRange
速度更快。具体数据如下:使用AddRange
仅需13毫秒,而使用Concat().ToList()
则需要花费16000毫秒,当仅在最后执行ToList
操作时,使用IEnumerable
的Concat
方法仅需要2700毫秒。 - Andrew