2011-01-05 11 views

Respuesta

5

Los atributos son metadatos aplicados a miembros de un tipo, el tipo en sí, los parámetros del método, o el conjunto. Para que usted tenga acceso a los metadatos, usted debe haber tenido el propio miembro original al usuario GetCustomAttributes etc, es decir, la instancia de Type, PropertyInfo, etc. FieldInfo

En su caso, no me habría importado pasar el nombre de la propiedad para el atributo en sí:

public CustomAttribute : Attribute 
{ 
    public CustomAttribute(string propertyName) 
    { 
    this.PropertyName = propertyName; 
    } 

    public string PropertyName { get; private set; } 
} 

public class MyClass 
{ 
    [Custom("MyProperty")] 
    public int MyProperty { get; set; } 
} 
+5

Gracias Sé que esto puede ser resuelto mediante el paso propiedad nombre, voy a hacer esto sin pasar a la propiedad nombre . Entonces basado en su respuesta no es posible. – Sadegh

+0

No es posible, los atributos no se pasan información sobre los miembros a los que están vinculados. Lo que sería útil es si la instancia 'Attribute' se pasó el' ICustomAttributeProvider' que se utilizó para crearlo, pero lamentablemente este no es el caso. –

+0

Gracias Matthew muy útil. – Sadegh

0

no se puede hacer dentro de la propia clase de atributo. sin embargo, usted puede tener un método que toma un objeto obtiene una lista de las propiedades de ese objeto (si las hay) que usan el atributo. utilizar esta API para poner en práctica lo siguiente: http://msdn.microsoft.com/en-us/library/ms130869.aspx

+0

OK, sé que hay muchas maneras (una como su enfoque), pero ninguno de esos es mi caso. – Sadegh

95

Usando CallerMemberNameAttribute de .NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null) 
{ 
    // ... 
} 
+1

Impresionante. Guarda un parámetro para un atributo que tendré que usar para decorar propiedades en todo el proyecto. – Ellesedil

+6

Esta debería ser la respuesta aceptada, gracias hombre! –

+1

Estaba buscando esto pero no funciona [con enumeraciones] (http://stackoverflow.com/q/28094024/465942) desafortunadamente .. –

Cuestiones relacionadas