Linq在列表中循环时更新列表

Linq在列表中循环时更新列表,linq,Linq,我有一份清单,可查阅如下: List<PingtreeNode> _pingtree; IEnumerable<PingtreeNode> ActiveNodes { get { return _pingtree.Where(x => x.Status == PingtreeNodeStatus.Ready);} } PingtreeNode的属性之一是“Product”,并且一个产品可以在列表ActiveNodes中存在多次 我想做的就是这样。如果产品

我有一份清单,可查阅如下:

List<PingtreeNode> _pingtree;

IEnumerable<PingtreeNode> ActiveNodes
{
    get { return _pingtree.Where(x => x.Status == PingtreeNodeStatus.Ready);}
}
PingtreeNode的属性之一是“Product”,并且一个产品可以在列表ActiveNodes中存在多次

我想做的就是这样。如果产品的isValid为true,则需要将包含相同产品的所有后续节点设置为PingtreeNodeStatus.FailedCriteria。换句话说,在节点列表的下一步忽略它们,不对它们执行验证


我知道如何迭代循环并执行此操作,但我关心的是在列表中更新列表。是否有一种安全的方法来实现这一点?

在迭代列表时不可能更新列表,但这不是您要做的。
您不是在修改列表,而是在修改列表中项目的属性,这是完全安全的。

“有没有安全的方法来实现这一点?”你有例外情况吗?我没有例外情况,但这并不意味着我没有考虑过例外情况的可能性,因为我缺乏经验。如果你没有例外情况,你的代码是安全的,这个问题不清楚。
    void ValidateBuyerRules()
    {
        var nodes = ActiveNodes.Where(x => x.RuleClass.IsNotNullOrEmpty());

        foreach (var n in nodes)
        {
            var isValid = NewRuleSet(n.RuleClass).Validate(_appForm);

            if (!isValid) n.Status = PingtreeNodeStatus.FailedCritera;
        }
    }