Подтвердить что ты не робот

Атрибуты и атрибуты CustomAttributes в PropertyInfo

Я работал с Reflections и хотел получить все атрибуты, объявленные для свойства. В классе PropertInfo есть два свойства: CustomAttributes и Attributes.

В соответствии с 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;}
        }
    }
}
4b9b3361

Ответ 1

PropertyInfo.Attributes не имеет ничего общего с классом атрибута. Проверьте перечисление PropertyAttributes для значений, которые могут возникнуть. Это детали реализации CLR, которые не имеют очевидного соединения с кодом С#. Да, это был неудачный выбор именования.

Чтобы найти атрибуты, такие как ваш [Обязательный] атрибут, вы должны использовать свойство CustomAttributes.