PropertyInfo中的属性与CustomAttributes

时间:2013-07-30 18:02:17

标签: c# .net reflection

我一直在使用Reflections并希望获得为属性声明的所有属性。 PropertInfo类下有两个属性CustomAttributesAttributes

根据MSDN,它们解释如下:

属性:

  

此属性表示与成员关联的属性。所有   成员具有一组与之相关的属性   特定类型的成员。属性属性让用户知道是否   此属性是默认属性,SpecialName属性等   上。

注意: PropertyInfo.Attributes页面中提供的代码示例甚至无效。

自定义属性:

  

包含应用于此的所有自定义属性的数组   成员,如果没有定义属性,则为零元素的数组。

但是,当我为他们运行此代码时,Attributes会在CustomAttributes返回Required时返回任何内容。

void Main()
{
    var attributes = typeof(Myproperty).GetProperty("Caption").CustomAttributes;
    //var attributes = typeof(Myproperty).GetProperty("Caption").Attributes;
    attributes.Dump(); //Dump is a LinqPad method which dumps everything to the outpu window
}

public class Myproperty
{
    private string caption = "Default caption";

    [Required]
    public string Caption
    {
        get{return caption;}
        set {if(caption!=value) {caption = value;}
        }
    }
}

1 个答案:

答案 0 :(得分:27)

PropertyInfo.Attributes与Attribute类没有任何关系。检查PropertyAttributes enumeration可能遇到的值。这些是与C#代码没有明显联系的CLR实现细节。是的,这是一个不幸的命名选择。

要查找[必需]属性等属性,必须使用CustomAttributes属性。