Почему MemberInfo.GetCustomAttributes(Type) определен для возврата массива атрибутов?

public enum Animal
{
    [Description("King of jungle")]
    Lion= 1,

    [Description("Tallest there")]
    Giraffe = 2
}

Предположим, у меня есть FieldInfoЯ могу сделать это двумя способами:

//static one on 'Attribute' class
Attribute attribute = Attribute.GetCustomAttribute(field, 
                                                   typeof(DescriptionAttribute), 
                                                   false);

Все в порядке.

Но тот, что ниже, возвращает [] скорее, чем Attribute?

//instance one on 'MemberInfo` class
var attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);

Этот вопрос на самом деле не о выборе дизайна MS. Мой вопрос должен ли я быть обеспокоен field.GetCustomAttributes возвращать несколько элементов для определенного типа атрибута? В каких случаях это произойдет?

[Description("King of jungle")]
[Description("I'm a lion")]
Lion= 1

Я думаю, это невозможно. Я думаю, что я должен справиться с этим при написании некоторых вспомогательных функций отражения.

1 ответ

Решение

Имеет смысл возвращать несколько элементов для каждого типа атрибута. Подумайте об атрибутах, разработанных с помощью базового класса. Или атрибуты, где вы могли бы предоставить несколько опций / типов по конструктору.

Одним из примеров является XmlArrayItemAttribute См. MSDN: класс XmlArrayItemAttribute.

Если вы хотите ограничить использование ваших атрибутов только один раз, вы можете добавить allowmultiple:=False пометить к вашему AttributeUsage,

@Комментарий

DescriptionAttribute has AllowMultiple:=False (по умолчанию, если вы его не указали - по крайней мере, в VB.NET). Чтобы получить эффект, создайте свой собственный атрибут, полученный из Attribute и пометить его AttributeUsage где вы установите AllowMultiple = True,

Другие вопросы по тегам