2011-08-22 51 views

回答

4

由於LINQ確實是一個查詢語言,所以我認爲它很糟糕樣式來查詢在評估時會產生次要影響。我個人要麼離開的事情會是這樣,或者改變它的東西是這樣的:

var c = a.Sum(); 
var b = a.ToList(); 
foreach(var item in a) 
{ 
    DoSomething(); 
} 

即使你最終多次迭代的序列,它在每一行代碼的一瞥更容易,立即知道它做了什麼。

+0

不是'b = a'與'b = a.ToList()'相同嗎? – colinfang

+2

否:'b = a'複製引用('a'和'b'現在引用同一個列表),而'b = a.ToList()'創建列表的副本('a'和'b '現在指的是具有相同內容的不同列表)。 – cdhowie

+1

@colinfang:這段代碼片斷假設'b'是一個新創建的列表,並且由於您將每個項目添加到'a'中,那麼您最終將得到與'a'中相同的內容'for'循環的結尾。然而,如果你想讓'b'擁有額外的元素,你可以使用其他方法如'Concat','Aggregate'來產生你要去的集合。重點是讓你的代碼聲明。 'b = d.Concat(c).ToList()':「哦,所以'b'是一個包含'd'和'c'內容的列表。 – StriplingWarrior

3

你可以這樣做:

var b = a.Select(i => { c += i; dosomething(); return i; }).ToList(); 

注意,這是可能認爲是不好的做法。 foreach循環可能更具可讀性,因此更易於維護。 (由於沒有針對列表中的每個項目執行跳轉指針指令,所以它也會更具性能。)

相關問題