如何按类型过滤集合?

时间:2015-06-03 14:40:11

标签: c# lambda where-clause

我有三个班级:

public class class1 {}
public class class2 : class1 {}
public class class3 : class1 {}

以及class1的项目列表,但我想只获取class2类型的项目,例如:

list = list.where(x=>x.classType == class2)

这样做的正确方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:9)

您可能需要OfType<T>(): -

var newList = list.OfType<Class2>().ToList();

除了更简洁之外,这还有一个额外的好处,newList类型为List<Class2>(而不是List<Class1>恰好只包含{{1}的实例拯救你继续下线。

答案 1 :(得分:2)

您想使用GetType()方法和typeof()

list = list.Where(x => x.GetType() == typeof(class2)).ToList(); 

或者,您可以使用is

list = list.Where(x => x is class2).ToList();