所以我有以下课程
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中定义,但我该如何解决这个问题?
答案 0 :(得分:0)
如果我在属性上使用new
关键字而不是virtual
和override
,则会解决此问题。
我认为这与没有类型Manager
的实例这一事实有关。
另一种解决方法是将GetProp
的实现更改为
return typeof(T).GetProperty(property.Name)
而不仅仅是返回property