Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#/Linq中搜索集合中的子类型_C#_Linq_Polymorphism - Fatal编程技术网

在C#/Linq中搜索集合中的子类型

在C#/Linq中搜索集合中的子类型,c#,linq,polymorphism,C#,Linq,Polymorphism,如果我有像这样的收藏 List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>(); 假设我想查询someChildOfType1的所有元素。我如何做到这一点我已经尝试了以下方法(无法编译,可以从子类型转换为父类型) List temp=someList.Where(x=>x.GetType()==typeof(ChildType1)).ToList(); 你知道我该怎么做吗?Enumer

如果我有像这样的收藏

List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>();
假设我想查询someChildOfType1的所有元素。我如何做到这一点我已经尝试了以下方法(无法编译,可以从子类型转换为父类型)

List temp=someList.Where(x=>x.GetType()==typeof(ChildType1)).ToList();
你知道我该怎么做吗?

Enumerable.OfType()
扩展方法。

Enumerable.OfType()
扩展方法。

List temp=someList.OfType().ToList();
List<ChildType1> temp = someList.OfType<ChildType1>().ToList();
List temp=someList.OfType().ToList();
Enumerable.OfType()
仅在.NET 3.5及更高版本中可用,因此您似乎需要一个能在.NET 3.0中工作的解决方案

问题是,即使找到了所有子类型,列表仍然是基类型。构建子类型列表的一种方法是使用
ConvertAll
强制转换您知道属于正确类型的对象:

List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);
List temp=someList.FindAll(x=>x是ChildType1.ConvertAll(x=>(ChildType1)x);
Enumerable.OfType()
仅在.NET 3.5及更高版本中可用,因此您似乎需要一个能在.NET 3.0中工作的解决方案

问题是,即使找到了所有子类型,列表仍然是基类型。构建子类型列表的一种方法是使用
ConvertAll
强制转换您知道属于正确类型的对象:

List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);
List temp=someList.FindAll(x=>x是ChildType1.ConvertAll(x=>(ChildType1)x);

我不知道如何重现您的问题,因为您的代码对我有效(没有编译器错误)。我在.NET3.5/4.0中编译了它,它运行得很好。无论哪种方法,您都可以使用
可枚举的.OfType()
。由于您的代码对我有效(没有编译器错误),我不知道如何重现您的问题。我在.NET3.5/4.0中编译了它,它运行得很好。无论哪种方法,您都可以使用
可枚举的.OfType()
List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);