foreach (var item in List<int> a)
{
b.add(item);
c+=item;
dosomething();
}
如何編寫成Linq的形式呢?或者是否有必要?
我猜它具有以下格式:var b = a.xxxx(x=>(c+=x;dosomething())).ToList()
foreach (var item in List<int> a)
{
b.add(item);
c+=item;
dosomething();
}
如何編寫成Linq的形式呢?或者是否有必要?
我猜它具有以下格式:var b = a.xxxx(x=>(c+=x;dosomething())).ToList()
由於LINQ確實是一個查詢語言,所以我認爲它很糟糕樣式來查詢在評估時會產生次要影響。我個人要麼離開的事情會是這樣,或者改變它的東西是這樣的:
var c = a.Sum();
var b = a.ToList();
foreach(var item in a)
{
DoSomething();
}
即使你最終多次迭代的序列,它在每一行代碼的一瞥更容易,立即知道它做了什麼。
你可以這樣做:
var b = a.Select(i => { c += i; dosomething(); return i; }).ToList();
注意,這是可能認爲是不好的做法。 foreach
循環可能更具可讀性,因此更易於維護。 (由於沒有針對列表中的每個項目執行跳轉指針指令,所以它也會更具性能。)
不是'b = a'與'b = a.ToList()'相同嗎? – colinfang
否:'b = a'複製引用('a'和'b'現在引用同一個列表),而'b = a.ToList()'創建列表的副本('a'和'b '現在指的是具有相同內容的不同列表)。 – cdhowie
@colinfang:這段代碼片斷假設'b'是一個新創建的列表,並且由於您將每個項目添加到'a'中,那麼您最終將得到與'a'中相同的內容'for'循環的結尾。然而,如果你想讓'b'擁有額外的元素,你可以使用其他方法如'Concat','Aggregate'來產生你要去的集合。重點是讓你的代碼聲明。 'b = d.Concat(c).ToList()':「哦,所以'b'是一個包含'd'和'c'內容的列表。 – StriplingWarrior