在超类列表中查找子类成员.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
我本以为因为Adult是Person的子类,所以转换应该是有效的。我应该怎么做才能使我的代码正常工作?
尝试使用以下扩展方法Enumerable.OfType()和Enumerable.FirstOrDefault()的Linq表达式:
var adultWithCar = people.OfType<Adult>().FirstOrDefault(x=>x.hasCar);