2013-12-11 44 views
0

循環我有一個列表,它是可訪問如下: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爲真,則需要將包含相同產品的所有後續節點設置爲PingtreeNodeStatus.FailedCriteria。換句話說,在節點列表中進一步忽略它們,並且不對它們執行驗證。

我知道如何遍歷循環,並做到這一點,但我擔心更新列表,而已經在列表中。有沒有一種安全的方法來實現這一目標?

+0

_「有沒有一種安全的方法來實現這個目標?」_你有例外嗎? –

+0

我沒有得到例外,但這並不意味着我沒有考慮過由於缺乏經驗而沒有考慮到的可能性。 – dotnetnoob

+0

如果你沒有得到例外,你的代碼是安全的,這個問題還不清楚。 –

回答

1

迭代它時不可能更新列表,但這不是你在做什麼。 您並未修改列表,而是修改列表中的項目屬性,這非常安全。