2012-08-09 92 views
2

我有一個關於LINQ,IEnumerable<>List<>的問題。是否使用擴展方法ToList <T>()浪費資源?

當我有一個List<T>和要過濾或搜索它,我使用LINQ這樣的:

var psec = from p in MyListOfSomeObjects 
      where ((p.Tipo == tipo) || (p.Tipo == null)) 
      select p; 

但在一個特定的情況下,我需要一個實際的List<T>,而不是IEnumerable<T>被返回的LINQ查詢。

我可以使用psec.ToList<T>()讓我List<T>,但我的問題是:

請問方法ToList<T>()浪費時間和計算機資源?它是否通過IEnumerable<T>做了一些迭代或循環來構建List<T>

回答

5

做的方法Tolist <>()浪費時間或計算機資源?

這取決於。如果你需要需要的清單,那麼這可能不是浪費。它的確使用時間和資源來建立清單。

做一些迭代或循環遍歷IEnumerable psec來構建列表<>?

是的。它遍歷枚舉並從其中的項目構建列表。

一般情況下,如果你的目標只是通過結果枚舉(即:在foreach循環使用),就沒有必要通過ToList()轉換爲List<T>,而這樣做只是浪費。

+0

如果您將它作爲單個LINQ語句使用,您知道ToList是否被優化到任何程度? – James 2012-08-09 19:20:55

+0

@詹姆斯不 - 它是否在一個「陳述」中完成並不重要。編譯器以相同的方式對待它,它只是一個方法調用。 'ToList()'只是(有效地)返回'新列表(sourceEnumerable)' – 2012-08-09 19:25:54

+0

@James它真的和你要做的一模一樣:'List newList = new List (psec);' – 2012-08-09 19:26:54