2013-02-07 20 views
1

我的VS2010使用ReSharper,它提示將foreach轉換爲LINQ。它從使用LINQ自動轉換

foreach (var item in quotePrice.ExtraServiceBreakdown) 
{ 
    hazmatRate = (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? 
               item.Cost : hazmatRate; 
} 

hazmatRate = quotePrice.ExtraServiceBreakdown.Aggregate(
       hazmatRate, (current, item) => 
        (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? 
         item.Cost : current); 

轉換我這裏有兩個問題,

  1. 是什麼意思current?那是指向變量hazmatRate
  2. Aggregate實際上做了什麼?
+1

問題是,你正在設置一個變量在'foreach'沒有打破它,因此你總是覆蓋它。這不是有效的,並且可能容易出錯(如果你不想要最後的值)。 –

+0

在問題#2中,您是否嘗試閱讀關於Aggregate的文檔? –

+0

@TimSchmelter,你能解釋一下嗎? **沒有打破它,** – DON

回答

1
  1. 當前確實點到你的危險品
  2. LINQ Aggregate algorithm explained

,我想你需要做的是在由蒂姆評論說:

hazmatRate += (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? item.Cost : hazmatRate; 

但在這case我會改變'hazmatRate'在您的函數之前聲明的基準速率。否則,你會增加你的價值與它所包含的價值,使其成倍增長之前