Secara default, Attributes dibatasi untuk diterapkan hanya sekali ke satu bidang / properti / etc. Anda dapat melihat ini dari definisi Attributekelas di MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Oleh karena itu, seperti yang telah dicatat orang lain, semua subclass dibatasi dengan cara yang sama, dan jika Anda memerlukan beberapa instance dari atribut yang sama, Anda perlu menyetel secara eksplisit AllowMultipleke true:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Pada atribut yang memungkinkan beberapa penggunaan, Anda juga harus mengganti TypeIdproperti untuk memastikan bahwa properti PropertyDescriptor.Attributes berfungsi seperti yang diharapkan. Cara termudah untuk melakukannya adalah dengan mengimplementasikan properti itu untuk mengembalikan instance atribut itu sendiri:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Memposting jawaban ini bukan karena yang lain salah, tetapi karena ini adalah jawaban yang lebih komprehensif / kanonik.)