Resharper說我可以但我不知道如何。有形式的幾個例子:如何對此進行LINQ化?
foreach (ItemType Item in ListOfItems)
if (ConditionalInvolvingItem)
Total += ItemProperty;
當然我能在有條件的子表,然後總結在子列表中的項目,但這個就沒有更清晰,並會運行速度較慢。
Resharper說我可以但我不知道如何。有形式的幾個例子:如何對此進行LINQ化?
foreach (ItemType Item in ListOfItems)
if (ConditionalInvolvingItem)
Total += ItemProperty;
當然我能在有條件的子表,然後總結在子列表中的項目,但這個就沒有更清晰,並會運行速度較慢。
ReSharper是一個方便的工具,但請記住它的建議並不總是更高效或不言自明。這裏就是這種情況。這真是一種折騰。我相信你已經有一個LINQ聲明,但我想這個例子看起來是這樣的:
var Total = (from Item in ListOfItems
where (ConditionalInvolvingItem)
select ItemProperty).Sum();
我也只記得如果你沒有處理非數字類型,你需要使用Aggregate而不是Sum來提供你自己的累加器函數。記住可讀性的時候記住這一點。 – doctorless 2011-05-14 03:46:04
謝謝。現在我明白我錯過了什麼。 – 2011-05-14 17:32:48
var total = listOfItems
.Where(item => ConditionalInvolvingItem(item))
.Sum(item => item.Property);
+1。嚴肅的問題:一目瞭然,哪一個更容易理解? – 2011-05-14 03:30:24
我不會在代碼審查中抱怨'foreach',但這不是問題。 Linq版本*更能表達意圖,但您使用的是您的電話。 – 2011-05-14 03:32:05
你們似乎都在同一時間回答了基本相同的答案。既然你已經得到100倍的分數,我給了他接受的答案,因爲我不能接受你們兩個。 – 2011-05-14 17:33:28
但resharper也將它轉換爲LINQ爲你....只是使用ALT-輸入。 – 2011-05-14 04:33:24