Jer*_*ero 6 .net getcustomattributes linq-expressions
我试图用来GetCustomAttributes()获取属性上定义的属性.问题是该属性是一个被覆盖的属性,我无法弄清楚如何从表达式中提取被覆盖的属性.我只能弄清楚如何获得基类.
这是一些代码
public class MyAttribute : Attribute
{
//...
}
public abstract class Text
{
public abstract string Content {get; set;}
}
public class Abstract : Text
{
[MyAttribute("Some Info")]
public override string Content {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我试图MyAttribute摆脱抽象类.但我需要通过一个Expression.这就是我一直在使用的:
Expression<Func<Abstract, string>> expression = c => c.Content;
Expression exp = expression.Body;
MemberInfo memberType = (exp as MemberExpression).Member;
var attrs = Attribute.GetCustomAttributes(memberType, true);
Run Code Online (Sandbox Code Playgroud)
不幸的是atts最终为空.问题是menberType最终是为了Text.Content而不是Abstract.Content班级.因此,当我获得属性时,它什么都不返回.
它不起作用,因为它MemberExpression会忽略覆盖并从基本类型返回属性,Text这就是您找不到属性的原因。
您可以在这里阅读有关此问题的信息:How to get the child declaring type from an expression?
但是,您在表达式中拥有所有信息,并且可以通过更多的反射来获取属性(快速而肮脏的示例):
Expression<Func<Abstract, string>> expression = (Abstract c) => c.Content;
Expression exp = expression.Body;
MemberInfo memberType = (exp as MemberExpression).Member;
var attrs = Attribute.GetCustomAttributes(
expression.Parameters[0].Type.GetProperty(memberType.Name));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |