簡體   English   中英

使LINQ一次處理所有收集的最簡單方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM