假设我们有两个班级
class A{
public abstract int Prop1 {get; set;}
}
和它的孩子
class Child : A{
[CustomAttr(someval)]
override public int Prop1 {get; set;}
}
所以稍后在我的代码中我需要获得这个自定义属性' s。
bool haveCustomAttr(IExpression<Func<Child, int>> property){
return ((MemberExpression)property.Body).Member.GetCustomAttributes(typeof(CustomAttr)).Any();
}
所以当我调用此代码时
haveCustomAttr(c => c.Prop1)
它返回false
因为((MemberExpression)property.Body).Member
由于某种原因A.Prop1
而不是Child.Prop1
可以使用更高级的结构进行修复
((MemberExpression)property.Body).Expression.Type.GetMember(((MemberExpression)property.Body).Member
.Name)[0].GetCustomAttributes(typeof(CustomAttr), false).Any();
但它仍然不清楚为什么它最初威胁这个表达式作为基类,如果它明确地说它来自Child
类的表达式。有人可以为我解释这背后的逻辑吗?