我有一个像这样的Helper方法来获取PropertyName(试图避免魔术字符串)
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属性。
如何更改我的方法以读取该eproperty的属性(如果可用)?
非常感谢,
答案 0 :(得分:21)
这应该有效:
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;
}