2

假设我在设计时知道类型,有没有办法IEnumerable<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 回答