考虑以下示例:
当调用
编辑: 澄清一下,我的意思是元素正在从
IEnumerable<Int32> groupsToAdd = new List<Int32>();
List<Int32> groups1 = new List<Int32>() { 1,2,3 };
List<Int32> groups2 = new List<Int32>() { 3,4,5 };
groupsToAdd = groups1.Where(g => false == groups2.Contains(g));
groups2.AddRange(groupsToAdd);
groupsToAdd.Dump();
当调用
groupsToAdd.Dump()
时,列表现在为空。我查阅了AddRange的参考文献,它没有提到元素从列表中删除,但当我测试这段代码(在linqpad中)时,它最终为空。为什么会这样呢?编辑: 澄清一下,我的意思是元素正在从
groupsToAdd
中删除,因为在groups2.AddRange(groupsToAdd)
之前,groupsToAdd已经填充了两个元素。
groupsToAdd = groups1.Where(g => false == groups2.Contains(g)).ToList();
,则将查询实例化为List<int>
。然后它的行为就像预期的那样,因为不再有延迟执行。 - Tim SchmeltergroupsToAdd
是一个列表,这是不正确的。 - Tim Schmelter