如何通过Reflection获取属性的DisplayAttribute?

我有一个像这样的Helper方法来获取PropertyName(试图避免魔术字符串)

public static string GetPropertyName(Expression<Func> 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属性。

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

非常感谢,

这应该工作:

 public static string GetPropertyName(Expression> 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; }