2011-03-31 11 views
10

que tienen un método de ayuda como este para que me la PropertyName (tratando de evitar las cadenas mágicas)¿Cómo obtener DisplayAttribute de una propiedad por Reflection?

public static string GetPropertyName<T>(Expression<Func<T>> expression) 
     { 
      var body = (MemberExpression) expression.Body; 
      return body.Member.Name; 
     } 

Sin embargo a veces mis PropertyNames no se nombran así sea. Entonces me gustaría usar el DisplayAttribute.

[Display(Name = "Last Name")] 
public string Lastname {get; set;} 

Por favor, tenga en cuenta que estoy usando Silverlight 4.0. No pude encontrar el atributo habitual DisplayAttributeName del espacio de nombre para esto.

¿Cómo puedo cambiar mi método para leer el atributo (si está disponible) de la propiedad en su lugar?

Muchas gracias,

Respuesta

19

esto debería funcionar:

public static string GetPropertyName<T>(Expression<Func<T>> expression) 
{ 
    MemberExpression propertyExpression = (MemberExpression)expression.Body; 
    MemberInfo propertyMember = propertyExpression.Member; 

    Object[] displayAttributes = propertyMember.GetCustomAttributes(typeof(DisplayAttribute), true); 
    if(displayAttributes != null && displayAttributes.Length == 1) 
     return ((DisplayAttribute)displayAttributes[0]).Name; 

    return propertyMember.Name; 
} 
+0

Muchas gracias! – Houman

+0

De nada, Kave! –

+0

gracias por salvarme escribiendo. – TheVillageIdiot

Cuestiones relacionadas