假设我在设计时知道类型,是否有办法从IEnumerable<T>
获得IEnumerable
而不是reflection?
我有这个
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的类型为DirectoryEntries
。它实现IEnumerable
但不实现IEnumerable<DirectoryEntry>
。
答案 0 :(得分:6)
实现此目的的方法是使用.Cast<T>()
extension method。
Parallel.ForEach(de.Children.Cast<DirectoryEntry>(),
(DirectoryEntry child) => { // long running code on each child });
实现此目的的另一种方法是使用.OfType<T>()
extension method。
Parallel.ForEach(de.Children.OfType<DirectoryEntry>(),
(DirectoryEntry child) => { // long running code on each child });
.Cast<T>()
和.OfType<T>()
OfType(IEnumerable)方法仅返回那些元素 可以强制转换为TResult类型的源代码。而是收到一个 如果一个元素无法转换为类型TResult,则使用异常 铸(IEnumerable的)。
- MSDN
此链接on the MSDN forums让我走向正确的方向。