Nat*_*ate 2 c# parallel-processing active-directory task-parallel-library
假设我在设计时知道类型,IEnumerable<T>有IEnumerable没有办法从无反射中得到一个?
我有这个
foreach(DirectoryEntry child in de.Children)
{
// long running code on each child object
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试启用并行化,就像这样
Parallel.ForEach(de.Children,
(DirectoryEntry child) => { // long running code on each child });
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为de.Children属于类型DirectoryEntries.它实现IEnumerable但不实现IEnumerable<DirectoryEntry>.
实现此目的的.Cast<T>()方法是使用扩展方法.
Parallel.ForEach(de.Children.Cast<DirectoryEntry>(),
(DirectoryEntry child) => { // long running code on each child });
Run Code Online (Sandbox Code Playgroud)
实现此目的的另一种方法是使用.OfType<T>()扩展方法.
Parallel.ForEach(de.Children.OfType<DirectoryEntry>(),
(DirectoryEntry child) => { // long running code on each child });
Run Code Online (Sandbox Code Playgroud)
.Cast<T>()和之间有一个微妙的区别.OfType<T>()
OfType(IEnumerable)方法仅返回源中可以强制转换为TResult类型的元素.要在不能将元素强制转换为类型TResult的情况下接收异常,请使用Cast(IEnumerable).
- MSDN
MSDN论坛上的这个链接让我走向了正确的方向.