2013-03-20 116 views
2
[MyAttribute("x")] 
public string Z{get;set;} 

[MyAttribute("x")] 
public void Y() 
{ 

} 

它找到方法上的attr就好了,但属性上的属性没有被识别。找不到属性的属性

public static bool HasAttribute(this MethodInfo m, Type attrType) 
{ 
    return Attribute.IsDefined(m, attrType); 
} 

我调试期间,在它正确地列出在CustomAttributes属性的方法看了看对象,但对房地产的一个是空的......任何人都可以解释一下吗?

+0

似乎很奇怪。试图关闭你的编辑器并重新打开它?重新启动? – Jordan 2013-03-20 18:29:55

+0

如何定义MyAttribute? – antonijn 2013-03-20 18:31:30

+0

添加MyAttribute的声明?或者至少是AttributeUsage部分。 – JerKimball 2013-03-20 18:31:39

回答

2

您在属性上定义了属性,而不是在属性访问器上。为了在getter上提供属性,你可以使用这个语法(我包括了所有3个可能的位置,你可以根据它的适用性选择在任何组合上添加属性)。

[MyAttribute("on PropertyInfo")] 
public string Z 
{ 
    [MyAttribute("on getter MethodInfo")] get; 
    [MyAttribute("on setter MethodInfo")] set; 
} 
+0

最有可能的是,有点我在暗示的暗示 – JerKimball 2013-03-20 18:39:26

+0

是的,它nów它的工作..不能相信我浪费如此在这一个很多时间。非常感谢!此外,有没有办法通过methodinfo对象到达propertyinfo的属性?让我重述一下;什么是最有效的方法呢?因为我毫不怀疑这种或那种方式是可能的。 – natli 2013-03-20 19:01:51

+1

对于类型中的每个'PropertyInfo',检查'GetGetAccessor'或'GetSetAccessor'是否等于您所拥有的'MethodInfo' – 2013-03-20 19:17:36