MemberExpression的ReflectedType是基类,而不是实际使用的类

本文关键字:ReflectedType 基类 MemberExpression | 更新日期: 2023-09-27 18:29:16

所以我有以下类

class Person
{
    virtual string Property{get;set;}
}

class Manager : Person
{
    [SomeAttribute("Hello")]
    override string Property {get;set;}
}

如果我在类型Manager上有一个成员表达式,即:

Property prop = PropertyGetter.GetProp<Manager>(p => p.Property)

MemberExpression的ReflectedType是Person,而不是Manager。这意味着Attribute信息丢失。因此:

var attribute = prop.GetAttribute<SomeAttribute>();

attribute为空。

我假设这是因为属性来自基类,而不是在Manager中定义的,但我该如何绕过这一点?

MemberExpression的ReflectedType是基类,而不是实际使用的类

如果我在属性上使用new关键字而不是virtualoverride,则问题已解决。

我认为这与没有类型为Manager的实例这一事实有关。

另一种修复方法是将GetProp的实现更改为进行

return typeof(T).GetProperty(property.Name)

而不仅仅是返回property