在超类列表中查找子类成员。 C#

时间:2016-07-01 23:33:00

标签: c# polymorphism

说我有以下结构(不完整的代码)

public class Person{}
public class Adult : Person{
    bool hasCar;
}
public class Child : Person{
    bool goesToSchool;
}

我有一份人员名单:

List<Person> people = new List<Person>;

列表中包含成人和儿童。

让我们说我想找到第一个成年人,其中hasCar是真的。

我试过了:

Adult carOwner = people.Find((Adult x) => x.hasCar);

试试这个,我收到一个错误:

&#34;无法将lambda表达式转换为委托类型&#39; Predicate&lt;人&GT;&#39;因为参数类型与委托参数类型不匹配。参数1被声明为类型&#39;成人&#39;但应该是&#39; Person&#39;。&#34;

我原以为是因为Adult是Person的子类,转换应该是有效的。我该怎么做才能使我的代码有效?

1 个答案:

答案 0 :(得分:2)

尝试以下使用扩展方法Enumerable.OfType()Enumerable.FirstOrDefault()的Linq表达式:

 var adultWithCar = people.OfType<Adult>().FirstOrDefault(x=>x.hasCar);