从覆盖的属性表达式中获取自定义属性

时间:2018-11-27 09:12:57

标签: c# attributes expression-trees

我想从重写属性中获取自定义属性。一般而言,获取属性没有问题。

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.MemberPropertyInfo中的Foo.MyProperty,而不是Bar.MyProperty

如何从Bar.MyProperty获取属性?

0 个答案:

没有答案