在超类列表中查找子类成员.c#

本文关键字:子类 成员 查找 超类 列表 | 更新日期: 2023-09-27 17:54:11

假设我有以下结构(不完整代码)

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

我有一个Person列表:

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

,该列表由成人和儿童填充。

假设我想找到第一个hasCar为真的成人。

我试着:

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

尝试这个,我得到一个错误:

"无法将lambda表达式转换为委托类型'Predicate',因为参数类型与委托参数类型不匹配。参数1被声明为"Adult"类型,但应该是"Person"。"

我本以为因为Adult是Person的子类,所以转换应该是有效的。我应该怎么做才能使我的代码正常工作?

在超类列表中查找子类成员.c#

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

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