2

設計時にタイプを知っていると仮定して、反射なしで anIEnumerable<T>からを取得する方法はありますか?IEnumerable

私はこれを持っています

foreach(DirectoryEntry child in de.Children)
{
   // long running code on each child object
}

私は並列化を有効にしようとしています。

Parallel.ForEach(de.Children, 
    (DirectoryEntry child) => { // long running code on each child });

しかし、 de.Children は type であるため、これは機能しませんDirectoryEntries。実装しますが、実装IEnumerableしませんIEnumerable<DirectoryEntry>

4

1 に答える 1

6

これを実現する方法は、.Cast<T>()拡張メソッドを使用することです。

Parallel.ForEach(de.Children.Cast<DirectoryEntry>(), 
    (DirectoryEntry child) => { // long running code on each child });

これを実現する別の方法は、.OfType<T>()拡張メソッドを使用することです。

Parallel.ForEach(de.Children.OfType<DirectoryEntry>(), 
    (DirectoryEntry child) => { // long running code on each child });

と の間には微妙な違いが.Cast<T>()あります.OfType<T>()

OfType(IEnumerable) メソッドは、ソース内で TResult 型にキャストできる要素のみを返します。要素を TResult 型にキャストできない場合に代わりに例外を受け取るには、Cast(IEnumerable) を使用します。

-- MSDN

MSDN フォーラムのこのリンクにより、正しい方向に進むことができました。

于 2012-10-31T16:40:57.897 に答える