0

我有持有根对象的通用列表意味着我有:

public class Component  
{  
}  

public class DBComponent : Component  
{  
}  

private List<Component> components;   

我想使用 Linq 获取仅包含 DBComponent 引用的列表。意思是这样的:

List<DBComponent> dbComponents = components.FindAll(c => c is DBComponent);  

但是,它似乎不起作用
请有人提供有效的 Linq 代码吗?
谢谢

4

5 回答 5

4

您正在寻找

IEnumerable<DBComponent> dbComponents = components.OfType<DBComponent>();
于 2012-09-09T16:52:51.637 回答
2
List<DBComponent> dbComponents = components.OfType<DBComponent>().ToList();
于 2012-09-09T16:57:29.590 回答
1

可能是这样的,即使您的代码似乎也是有效的。

var result = components.Where(c => (c as DBComponent)!=null)
于 2012-09-09T16:53:02.153 回答
0
components.OfType<DBComponent>();
于 2012-09-09T16:53:20.050 回答
0

您应该使用OfTypeCast方法。关键区别在于Cast,如果 Enumerable 包含任何无法转换为目标类型的元素,则会引发异常。OfType不会抛出此异常,而只是跳过这些类型的元素。

在不同的场景下,这两种方法都可以派上用场,因此您可以自行选择。我想,如果您只想按某种类型过滤您的 Enumerable,OfType那就是您所需要的。

于 2012-09-10T00:02:42.727 回答