[英]What it the easiest way to make LINQ to process all collection at once?
我經常有類似的構造:
var t = from i in Enumerable.Range(0,5)
select num(i);
Console.WriteLine(t.Count());
foreach (var item in t)
Console.WriteLine(item);
在這種情況下,LINQ將對每個元素兩次評估num()
函數(一個用於Count(),一個用於輸出)。 因此,在這樣的LINQ調用之后,我必須聲明新的變量: var t2 = t.ToList();
有一個更好的方法嗎?
您可以調用ToList
而無需創建單獨的變量:
var t = Enumerable.Range(0,5).Select(num).ToList();
編輯 :或者
var t = Enumerable.Range(0,5).Select(x => num(x)).ToList();
甚至
var t = (from i in Enumerable.Range(0,5)
select num).ToList();
我通常會調用這些函數,使其看起來像這樣:
var t = Enumerable.Range(0,5).Select(x => num(x))。ToList();
...
var count = 0
foreach(var item in t)
{
Console.WriteLine(item)
count++;
}
num現在每個項目評估一次。 如果要使用謂詞重載(Count(i => i.PropA ==“ abc”)),則只需將增量包裝在if中。 不要對所有內容都使用擴展方法。 就像您意識到的那樣,僅僅因為您看不到實現並不意味着它仍然不會花費您。
如果您希望大量使用具體值,那么ToList()是一個很好的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.