2011-03-31 107 views
10

我有这样的helper方法让我的属性名(试图避免魔术字符串)如何通过反射获取属性的DisplayAttribute?

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

但是有时我PropertyNames未命名太好。所以我想宁愿使用DisplayAttribute。

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

请注意我正在使用Silverlight 4.0。我找不到这个通常的命名空间DisplayAttributeName属性。

如何更改我的方法来读取属性(如果可用)的性能?

非常感谢,

回答

19

这应该工作:

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

太感谢你了! – Houman 2011-03-31 12:32:22

+0

不客气! – 2011-03-31 12:35:02

+0

感谢您节省我的打字费用。 – TheVillageIdiot 2012-07-04 10:13:58

相关问题