无法更新IEnumerable迭代器变量

时间:2015-04-30 15:53:31

标签: c# .net

我坚持下一个行为:

var contracts = result.Select(this.Map);
foreach (var contract in contracts) {
    contract.Id = 1;
}

return contracts;

循环后contract.id未更新且仍具有初始值。

var contracts = result.Select(this.Map).ToList();解决了我的问题,但我无法弄清楚为什么我无法更新迭代变量的属性?

1 个答案:

答案 0 :(得分:3)

您需要记住 LINQ查询的结果是表示查询的对象,而不是该查询的结果contracts是一个对象,在迭代时,将执行底层集合中每个对象到新对象的映射。每次迭代时,它都会再次执行映射。

在您的情况下,您正在迭代源集合,执行映射,编辑这些对象,将这些对象放在地板上,再次迭代集合,再次执行映射,然后查看那些对象,当然你看不到的编辑。

当您致电ToList时,您现在不再存储查询,而是该查询的结果,并且会观察对该集合中的项目的编辑,因为您'在后续迭代中重新查看相同的项目