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

时间:2016-01-06 00:58:23

标签: c# asp.net .net .net-4.5.2

所以我有以下课程

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

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

如果我在类型管理器上有成员表达式,即:

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

然后MemberExpression的ReflectedType为Person,而不是Manager。这意味着Attribute信息丢失。所以:

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

然后attribute为空。

我假设这是因为该属性来自基类,未在Manager中定义,但我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

另一种解决方法是将GetProp的实现更改为

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

而不仅仅是返回property