Как получить DisplayAttribute свойства по отражению? - PullRequest
12 голосов
/ 31 марта 2011

У меня есть метод 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.

Как я могу изменить свой метод для чтения атрибута (если он доступен) вместо этого свойства?

Большое спасибо,

1 Ответ

22 голосов
/ 31 марта 2011

Это должно работать:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...