2013-02-28 46 views
2

考慮下面的代碼:我是否必須使用CopyTo將自定義集合變爲可枚舉?

var results = searcher.FindAll(); 

SearchResult[] srList = new SearchResult[results.Count]; 
results.CopyTo(srList, 0); 

其中searcher.FindAll()回報System.DirectoryServices.SearchResultCollection

我必須使用CopyTo才能使它們變成一個枚舉,然後我可以在以後使用Parallel.ForEach如果是這樣,爲什麼?

我有using System.Linq但沒有ToList方法彈出。

謝謝大家!

回答

8

您可以使用Cast<T>()SearchResultCollection轉換爲IEnumerable<T>ToArray<T>()以創建數組。

SearchResult[] results = searcher.FindAll().Cast<SearchResult>().ToArray(); 

確保您包括System.Linq的命名空間:

using System.Linq; 
+0

' searcher.FindAll()。Cast ()'不會編譯,因爲'T'是未定義的... – Nuffin 2013-02-28 18:21:23

+0

+1正確答案...也是非常令人吃驚的Michael d編號沒有看到它明確提到的頁面鏈接的問題:鑄造'\t將IEnumerable的元素轉換爲指定的類型。 (由Enumerable定義。) – 2013-02-28 18:21:24

+0

@Nuffin:'searcher.FindAll.Cast ()' – quetzalcoatl 2013-02-28 18:22:18

3

可以使用Cast<T>擴展方法從非通用IEnumerable去的IEnumerable<SearchResult>

var results = searcher.FindAll().Cast<SearchResult>(); 
+0

呵呵?這幾乎不是jrummell已經給出的答案? – bas 2013-02-28 18:26:36

+0

OP要求一個'IEnumerable',而不是'Array'。在我開始回答之後,這個澄清被添加到@ jrummel的答案中。 – 2013-02-28 18:28:59

+0

awwww k +1對你也是如此:第 – bas 2013-02-28 18:29:53

相關問題