2013-01-05 39 views
0

我一直在使用LINQ-to-objects很長一段時間,但我現在只注意到Enumerable.ToLookup擴展方法並閱讀其文檔。我在找到最快捷的方法來找到一個只讀接口IEnumerable<T>。在我看來,將.ToLookup(o => o)附加到System.Linq.Lookup對象中的可枚舉結果上,該對象可以用作與ReadOnlyCollection<T>相同的用途。ToLookup與ReadOnlyCollection

那麼爲什麼我會再次創建一個ReadOnlyCollection<T>的直接實例呢?

回答

2

在概念上,查找不是隻讀的可枚舉。它更像是一個字典,其中每個鍵具有多個值,並且用於通過鍵查找匹配值。調用ToLookup完全枚舉輸入並構建查找。

A ReadOnlyCollection<T>將會便宜得多,因爲它僅包裝任何IList<T>,以及將只讀接口的語義含義與IEnumerable<T>相匹配。

+0

+1好極了!但是一個完整的答案還應該提到'ToLookup'不會像'ReadOnlyCollection'那樣「包裝」一個可寫列表。 – HappyNomad

+0

@HappyNomad在我上次的聲明(提及成本)中有人提出這個建議,但我並不十分明確。將編輯。 –

+0

好的,但是與以其他方式調用ToList()來實現LINQ-to-objects查詢以創建'ReadOnlyCollection'相比,枚舉/包裝並不會更昂貴。對於我期待的編輯,請在我的第一條評論中注意「可寫」這個詞。 – HappyNomad

相關問題