c# - 无法更新 IEnumerable 迭代器变量

标签 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();解决了我的问题,但我不明白为什么我不能更新迭代变量的属性?

最佳答案

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

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

当您调用 ToList 时,您现在不再存储查询,而是存储该查询的结果,并且可以观察到对该集合中项目的编辑,因为您在后续迭代中查看的是相同的项目

关于c# - 无法更新 IEnumerable 迭代器变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972375/

相关文章:

c# - 如何创建和管理构建服务器?

c# - Azure Functions 中 local.settings.json 的值

c# - 通过 lambda 找出一个列表是否包含另一个列表值

c# - Google recaptcha 公钥和私钥

c# - Microsoft 的数字库的名称是什么?

c# - VS2015 在添加新的实体数据模型时抛出异常

c# - 为什么 dapper 将每个数字列作为 Int64 返回?

.net - NuGet 还原失败 - .NET 7.0 与 .NET Standard 2.0 的兼容性

.net - 有没有办法告诉 .NET 在哪里寻找用户设置文件?

DataGridView 中的 C# FormatException