2011-05-14 31 views
2

Resharper說我可以但我不知道如何。有形式的幾個例子:如何對此進行LINQ化?

foreach (ItemType Item in ListOfItems) 
    if (ConditionalInvolvingItem) 
     Total += ItemProperty; 

當然我能在有條件的子表,然後總結在子列表中的項目,但這個就沒有更清晰,並會運行速度較慢。

+0

但resharper也將它轉換爲LINQ爲你....只是使用ALT-輸入。 – 2011-05-14 04:33:24

回答

3

ReSharper是一個方便的工具,但請記住它的建議並不總是更高效或不言自明。這裏就是這種情況。這真是一種折騰。我相信你已經有一個LINQ聲明,但我想這個例子看起來是這樣的:

var Total = (from Item in ListOfItems 
    where (ConditionalInvolvingItem) 
    select ItemProperty).Sum(); 
+0

我也只記得如果你沒有處理非數字類型,你需要使用Aggregate而不是Sum來提供你自己的累加器函數。記住可讀性的時候記住這一點。 – doctorless 2011-05-14 03:46:04

+0

謝謝。現在我明白我錯過了什麼。 – 2011-05-14 17:32:48

3
var total = listOfItems 
       .Where(item => ConditionalInvolvingItem(item)) 
       .Sum(item => item.Property); 
+1

+1。嚴肅的問題:一目瞭然,哪一個更容易理解? – 2011-05-14 03:30:24

+0

我不會在代碼審查中抱怨'foreach',但這不是問題。 Linq版本*更能表達意圖,但您使用的是您的電話。 – 2011-05-14 03:32:05

+0

你們似乎都在同一時間回答了基本相同的答案。既然你已經得到100倍的分數,我給了他接受的答案,因爲我不能接受你們兩個。 – 2011-05-14 17:33:28