Answers:
它们具有完全不同的语义。
AddRange通过向列表添加其他项来修改列表。
Concat返回一个包含列表和其他项的新序列,而无需修改列表。
选择具有所需语义的任何一个。
最大的区别是AddRange会对其进行调用的列表进行变异,而Concat会创建一个新的List。因此它们有不同的用途。
另外,Concat是一种扩展方法,适用于任何IEnumerable并返回IEnumerable,您需要一个.ToList()来生成一个新的List。
如果要扩展现有列表的内容,请使用AddRange。
如果要从两个IEnumerable来源创建新列表,则将Concat与.ToList一起使用。这具有不改变任何一个来源的质量。
如果您只需要枚举两个列表(或任何其他IEnumerable)的内容,则每次都只需使用Concat,这样做的好处是实际上没有分配新的内存来保存统一列表。
Concat
并AddRange
与List<KeyValuePair<string, string>>
具有1000个元素的测试相连接/相加/添加了100次,并且测试AddRange
速度非常快。结果是这些:AddRange
13毫秒,Concat().ToList()
16000毫秒,和Concat
上IEnumerable
做的只是ToList
在最后:2700毫秒。