我有一个可以按如下方式访问的列表:
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。换句话说,在节点列表中进一步忽略它们,并且不对它们执行验证。
我知道如何遍历循环并执行此操作,但我担心在已经在列表中时更新列表。有没有一种安全的方法来实现这一目标?
答案 0 :(得分:1)
迭代时不可能更新列表,但这不是你正在做的事情。 您不是要修改列表,而是修改列表中项目的属性,这非常安全。