1

我有一个要查询然后更新的列表,它是这样工作的:

List<PingtreeNode> nodes = new List<PingtreeNode>();
... add some nodes

var activeNodes = nodes.Where(x => x.Status == PingtreeNodeStatus.Active);

foreach(var n in activeNodes)
{
  n.Status = PingtreeNodeStatus.Applied;
}

我不确定这是否完全安全,因为我正在过滤状态,然后根据原始查询更新状态。

任何建议表示赞赏

4

1 回答 1

1

是的,这是完全安全的,因为您没有修改集合(即添加/删除项目) - 您只是在修改项目。这将影响进一步的查询,但不会影响当前查询。

当您在foreach语句中使用查询时,会创建枚举器。它按照基础集合(您的节点列表)的顺序逐个移动项目,并检查项目是否与过滤器匹配。找到此类项目后,将其作为当前项目返回。您已经检索了此项目,因此您可以随意对其进行任何修改。在下一次迭代中,枚举器从它停止的点继续枚举源项。

于 2013-06-13T14:17:55.340 回答