โดยค่าเริ่มต้นAttribute
s จะถูก จำกัด ให้ใช้กับฟิลด์ / คุณสมบัติ / ฯลฯ เพียงครั้งเดียวเท่านั้น คุณสามารถดูสิ่งนี้ได้จากคำจำกัดความของ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;
}
}
}
(การโพสต์คำตอบนี้ไม่ใช่เพราะคนอื่นผิด แต่เป็นเพราะคำตอบนี้ครอบคลุม / บัญญัติมากกว่า)