我想从重写属性中获取自定义属性。一般而言,获取属性没有问题。
public Attribute2 GetAttribute2<T> (Expression<Func<T, object>> expr) {
if (expr.Body is MemberExpression m)
return m.Member.GetCustomAttribute<Attribute2>();
return null;
}
但是如果我覆盖这样的属性
class Foo {
[Attribute1]
public virtual object MyProperty { get; set; }
}
class Bar : Foo {
[Attribute2]
public override object MyProperty {
get => base.MyProperty;
set => base.MyProperty = value;
}
}
输出不是我期望的
GetAttribute2<Foo>(x => x.MyProperty); // null as expected
GetAttribute2<Bar>(x => x.MyProperty); // also null
调试时,我看到m.Member
是PropertyInfo
中的Foo.MyProperty
,而不是Bar.MyProperty
。
如何从Bar.MyProperty获取属性?