You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用IList.ToList().AddRange()后未得到预期集合结果?

问题分析与解决方案

嘿,我一眼就看出问题出在哪了!咱们先拆解下你那段旧代码的问题:

旧代码的问题根源

你看这段代码:

IList<string> testList=new List<string>(); 
testList.Add("string1"); 
var testList2=new List<string>(testList); 
testList.ToList().AddRange(testList2);

这里的关键坑是:testList.ToList()会创建一个全新的List副本,你调用AddRange(testList2)其实是在这个临时副本上添加元素,完全没碰原来的testList!所以最后原集合自然还是只有1个元素。

正确的写法

要修改原集合的话,直接在原实例上调用AddRange就行。因为你声明的testList实际是List<string>类型的实例,只是用IList<string>接口来引用它,所以可以用以下两种方式操作:

写法一(直接强制转换,适合确定实际类型的场景)

IList<string> testList=new List<string>(); 
testList.Add("string1"); 
var testList2=new List<string>(testList); 
// 直接操作原实例
((List<string>)testList).AddRange(testList2);

写法二(安全类型检查,适合不确定实际类型的场景)

IList<string> testList=new List<string>(); 
testList.Add("string1"); 
var testList2=new List<string>(testList); 

var actualList = testList as List<string>;
if (actualList != null)
{
    actualList.AddRange(testList2);
}

这样操作后,testList里就会包含两个"string1"元素,完全符合你的预期啦!

内容的提问来源于stack exchange,提问作者Moises .Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:13:43