如何获取 class 的所有属性,其中 属性 基于某种类型

How to get all properties of a class where the property is based on a certain type

在 c# 中我有一个 class 上面有属性。

public class MyClass
{
   public MyPropClass1 Prop1 { get; set; }
   public MyPropClass2 Prop2 { get; set; }
   public AnotherClassAltogether Prop3 {get; set; }
}

假设 MyPropClass1 和 MyPropClass2 都继承自 MyPropBaseClass 但 AnotherClassAltogether 没有。

从 MyClass 获取所有属性的最简单方法是什么,或者链下某处继承自 class?

例如如果我想在 MyClass 中查询基于 MyPropBaseClass 的属性,那么它应该 return Prop1 和 Prop2

您需要获取所有属性,然后使用 PropertyInfo.PropertyType 找到那些继承自目标类型的属性,您可以使用 Type.IsAssignableTo 来实现:

var props = typeof(MyClass)
    .GetProperties()
    .Where(pi => pi.PropertyType.IsAssignableTo(typeof(MyPropBaseClass)))
    .ToList();

IsAssignableTo 自 .NET 5 起可用,因此对于早期版本使用 IsAssignableFromtypeof(MyBase).IsAssignableFrom(pi.PropertyType)