Estoy usando un atributo personalizado heredado de una clase de atributo. Lo estoy usando así:
[MyCustomAttribute("CONTROL")]
[MyCustomAttribute("ALT")]
[MyCustomAttribute("SHIFT")]
[MyCustomAttribute("D")]
public void setColor()
{
}
Pero se muestra el error "Duplicar atributo 'MyCustomAttribute'".
¿Cómo puedo crear un atributo permitido duplicado?
c#
attributes
ebattulga
fuente
fuente
AttributeUsageAttribute ;-p
Sin embargo, tenga en cuenta que si está utilizando ComponentModel (
TypeDescriptor
), solo admite una instancia de atributo (por tipo de atributo) por miembro; la reflexión cruda admite cualquier número ...fuente
La solución de Anton es correcta, pero hay otro problema .
En resumen, a menos que su atributo personalizado anule TypeId, acceder a él a través de
PropertyDescriptor.GetCustomAttributes()
solo devolverá una única instancia de su atributo.fuente
De forma predeterminada,
Attribute
los mensajes de correo electrónico están limitados a aplicarse solo una vez a un solo campo / propiedad / etc. Puede ver esto en la definición de laAttribute
clase en MSDN :Por lo tanto, como han señalado otros, todas las subclases están limitadas de la misma manera, y si necesita varias instancias del mismo atributo, debe establecer explícitamente
AllowMultiple
entrue
:En los atributos que permiten múltiples usos, también debe anular la
TypeId
propiedad para asegurarse de que propiedades comoPropertyDescriptor.Attributes
funcionan como se espera. La forma más sencilla de hacer esto es implementar esa propiedad para devolver la instancia del atributo en sí:(Publicar esta respuesta no porque los demás estén equivocados, sino porque es una respuesta más completa / canónica).
fuente
Como alternativa, piense en rediseñar su atributo para permitir una secuencia.
o
luego analice los valores para configurar su atributo.
Para obtener un ejemplo de esto, consulte AuthorizeAttribute en el código fuente de ASP.NET MVC en www.codeplex.com/aspnet .
fuente
MyCustomAttribute
constructor tome una matriz de cadenas, astring[]
, con o sin elparams
modificador. Entonces podría aplicarse con la sintaxis[MyCustom("CONTROL", "ALT", "SHIFT", "D")]
(conparams
).Después de agregar AttributeUsage, asegúrese de agregar esta propiedad a su clase Attribute
fuente