По умолчанию Attributes ограничено применением только один раз к одному полю / свойству / и т. Д. Вы можете увидеть это из определения Attributeкласса в MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Поэтому, как и другие отмечали, все подклассы ограничены таким же образом, и если вам потребуется несколько экземпляров одного и того же атрибута, вам нужно явно установить AllowMultipleна true:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Для атрибутов, допускающих многократное использование, вам также следует переопределить TypeIdсвойство, чтобы гарантировать, что такие свойства, PropertyDescriptor.Attributes как ожидаемые, работают. Самый простой способ сделать это - реализовать это свойство для возврата самого экземпляра атрибута:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Публикация этого ответа не потому, что другие ошибаются, а потому, что это более полный / канонический ответ.)