说我有以下结构(不完整的代码)
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的子类,转换应该是有效的。我该怎么做才能使我的代码有效?
答案 0 :(得分:2)
尝试以下使用扩展方法Enumerable.OfType()和Enumerable.FirstOrDefault()的Linq表达式:
var adultWithCar = people.OfType<Adult>().FirstOrDefault(x=>x.hasCar);