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中定义的,但我该如何绕过这一点?
如果我在属性上使用new
关键字而不是virtual
和override
,则问题已解决。
我认为这与没有类型为Manager
的实例这一事实有关。
另一种修复方法是将GetProp
的实现更改为进行
return typeof(T).GetProperty(property.Name)
而不仅仅是返回property