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

Hou*_*man 12 .net c# reflection silverlight

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

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

但有时我的PropertyNames也没有好好命名.所以我想宁愿使用DisplayAttribute.

[Display(Name = "Last Name")]
public string Lastname {get; set;}
Run Code Online (Sandbox Code Playgroud)

请注意我使用的是Silverlight 4.0.我无法找到通常的命名空间DisplayAttributeName属性.

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

非常感谢,

Flo*_*her 22

这应该工作:

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用资源文件,则需要使用`GetName()`方法,而不仅仅是`Name`属性,即第二行最后一行将返回`((DisplayAttribute)displayAttributes [0]).GetName();` (7认同)