Domyślnie Attributes są ograniczone do jednorazowego zastosowania do pojedynczego pola / właściwości / itp. Możesz to zobaczyć z definicji Attributeklasy w MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Dlatego, jak zauważyli inni, wszystkie podklasy są ograniczone w ten sam sposób i jeśli potrzebujesz wielu wystąpień tego samego atrybutu, musisz jawnie ustawić AllowMultiplena true:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
W przypadku atrybutów, które umożliwiają wielokrotne użycie, należy również zastąpić TypeIdwłaściwość, aby upewnić się, że właściwości, takie jak właściwości, PropertyDescriptor.Attributes działają zgodnie z oczekiwaniami. Najłatwiejszym sposobem jest zaimplementowanie tej właściwości w celu zwrócenia samej instancji atrybutu:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Publikowanie tej odpowiedzi nie jest spowodowane tym, że inni się mylą, ale dlatego, że jest to bardziej kompleksowa / kanoniczna odpowiedź).