如果我有像
这样的集合List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>();
我已经为这个集合添加了两个不同的子类型(即两个子类型继承自SomeAbstractBaseType),如下所示:
someList.Add(someChildOfType1);
someList.Add(someChildOfType2);
someList.Add(someOtherChildOfType1);
someList.Add(someOtherChildOfType2);
假设我想查询someChildOfType1的所有元素。我怎么能这样做我尝试了以下(不编译,可以从子类型转换为父类型)
List<ChildType1> temp = someList.Where(x => x.GetType() == typeof(ChildType1)).ToList();
我有什么想法可以做到这一点?
答案 0 :(得分:4)
List<ChildType1> temp = someList.OfType<ChildType1>().ToList();
答案 1 :(得分:0)
Enumerable.OfType<T>()
扩展方法。
答案 2 :(得分:0)
Enumerable.OfType<T>()
仅适用于.NET 3.5及更高版本,因此您需要一个可在.NET 3.0中运行的解决方案
问题在于,即使您找到了所有子类型,列表仍然是基本类型。构建子类型列表的一种方法是使用ConvertAll
来转换您知道的类型正确的对象:
List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);