Linq更新列表,同时循环列表

时间:2013-12-11 10:13:26

标签: linq

我有一个可以按如下方式访问的列表:

List<PingtreeNode> _pingtree;

IEnumerable<PingtreeNode> ActiveNodes
{
    get { return _pingtree.Where(x => x.Status == PingtreeNodeStatus.Ready);}
}

我还有一个方法,它的工作就是迭代存在RuleClass的一些ActiveNodes。对于每个节点,都会调用验证方法,如果发现节点无效,则会设置新的PingtreeNodeStatus。

    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;
        }
    }

PingtreeNode的一个属性是“Product”,产品可以在ActiveNodes列表中多次存在。

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

我知道如何遍历循环并执行此操作,但我担心在已经在列表中时更新列表。有没有一种安全的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

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