2013-07-02 29 views
3

我有很多方法,如下面的一個:在使用linq之前調用.Any().ForEach()之前是否有任何好處?

void ValidateBuyerRules() 
    { 
     var nodesWithRules = ActiveNodes.Where(x => x.RuleClass.IsNotNullOrEmpty()); 

     **if (!nodesWithRules.Any()) return;** 

     foreach (var ruleClass in nodesWithRules) 
     { 
      // Do something here 
     } 
    } 

正如你所看到的,我檢查是否有nodesWithRules任何物品並進行foreach語句之前退出的方法,但是這是不必要的代碼?

回答

12

除非您想要避免的foreach聲明之後有一些邏輯,否則這是不必要的,因爲它的工作原理是相同的。

foreach迭代nodesWithRules檢測到沒有項目並退出循環。

0

在任何地方打電話真的沒有意義。如果沒有結果從Where查詢返回,則永遠不會輸入for循環。

調用Any之前,實際上最終會傷害到性能,因爲你正在做兩個查詢。

4

如果這是linq 2 sql,請不要這樣做。

您會額外往返。

此外,如果您有任何其他類型的IEnumerable,您應該避免這種情況。 .net爲底層列表做了一些技巧,但你不應該依賴這些技巧。

相關問題