如何获取 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 起可用,因此对于早期版本使用 IsAssignableFrom
:typeof(MyBase).IsAssignableFrom(pi.PropertyType)
在 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 起可用,因此对于早期版本使用 IsAssignableFrom
:typeof(MyBase).IsAssignableFrom(pi.PropertyType)