Theo mặc định, Attributes được giới hạn chỉ được áp dụng một lần cho một trường / thuộc tính / v.v. Bạn có thể thấy điều này từ định nghĩa của Attributelớp trên MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Do đó, như những người khác đã lưu ý, tất cả các lớp con được giới hạn trong cùng một cách, và bạn nên yêu cầu nhiều trường hợp của các thuộc tính giống nhau, bạn cần phải rõ ràng thiết AllowMultipleđể true:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Trên các thuộc tính cho phép nhiều cách sử dụng, bạn cũng nên ghi đè thuộc TypeIdtính đó để đảm bảo rằng các thuộc tính đó PropertyDescriptor.Attributes hoạt động như mong đợi. Cách dễ nhất để làm điều này là triển khai thuộc tính đó để trả về bản thân thuộc tính:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Đăng câu trả lời này không phải vì những câu khác sai, mà vì đây là câu trả lời toàn diện / kinh điển hơn.)