c# - 在父类(super class)列表中查找子类成员。 C#

标签 c# polymorphism

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

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”,因为参数类型与委托(delegate)参数类型不匹配。参数 1 声明为“Adult”类型,但应为“Person”。”

我本以为因为 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/

相关文章:

c# - 如何通过事件或覆盖 SaveChangesAsync() 在 DbContext 中获取所有已保存的实体值

c++ - 在 C++ Cereal 库中使用 CEREAL_REGISTER_DYNAMIC_INIT 正确发布

c# - Resharper 快速修复模板

java - C# 相当于 Java Class.this

c# - 是否使用 select 或 AsEnumerable().Where()

c# - 将除以 10 的整数四舍五入到最接近的整数

c++ - 来自基类的访问者模式

ruby-on-rails - 单表继承还是多态?

c++ - 如何修复编译器错误 "class has no member named X"?

java - 泛型多态混淆?