Standardmäßig dürfen Attributes nur einmal auf ein einzelnes Feld / eine Eigenschaft / etc. Angewendet werden. Sie können dies aus der Definition der AttributeKlasse in MSDN ersehen :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Daher ist , wie andere haben festgestellt, werden alle Unterklassen in der gleichen Art und Weise beschränkt, und es sollten Sie mehrere Instanzen des gleichen Attribut erfordern, müssen Sie explizit AllowMultipleauf true:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Bei Attributen, die mehrere Verwendungen zulassen, sollten Sie die TypeIdEigenschaft auch überschreiben, um sicherzustellen, dass Eigenschaften wie PropertyDescriptor.Attributes erwartet funktionieren. Der einfachste Weg, dies zu tun, besteht darin, diese Eigenschaft zu implementieren, um die Attributinstanz selbst zurückzugeben:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Diese Antwort nicht veröffentlichen, weil die anderen falsch sind, sondern weil dies eine umfassendere / kanonischere Antwort ist.)