30

我一直在使用 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;}
        }
    }
}
4

1 回答 1

42

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

要查找类似于 [Required] 属性的属性,您必须使用 CustomAttributes 属性。

于 2013-07-30T18:09:27.310 回答