在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);