假设我有以下结构(不完整的代码)
public class Person{}
public class Adult : Person{
bool hasCar;
}
public class Child : Person{
bool goesToSchool;
}
我有一个人员列表:
List<Person> people = new List<Person>;
列表中包含成人和 child 。
假设我想找到第一个 hasCar 为真的成年人。
我尝试过:
Adult carOwner = people.Find((Adult x) => x.hasCar);
尝试这个,我收到一个错误:
“无法将 lambda 表达式转换为委托(delegate)类型“Predicate
我本以为因为 Adult 是 Person 的子类,所以转换应该是有效的。我应该怎么做才能让我的代码正常工作?
最佳答案
尝试以下使用扩展方法的 Linq 表达式 Enumerable.OfType()和 Enumerable.FirstOrDefault() :
var adultWithCar = people.OfType<Adult>().FirstOrDefault(x=>x.hasCar);
关于c# - 在父类(super class)列表中查找子类成员。 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155026/