Я создаю метод для получения атрибута DisplayAttribute из System.ComponentModel.DataAnnotations для отображения на метке свойства.
[Display(Name="First Name")]
public string FirstName { get; set; }
Метод работает хорошо:
string GetDisplay(Type dataType, string property)
{
PropertyInfo propInfo = dataType.GetProperty(property);
DisplayAttribute attr = propInfo.GetCustomAttributes(false).OfType<DisplayAttribute>().FirstOrDefault();
return (attr == null) ? propInfo.Name : attr.Name;
}
Вызов метода может быть:
lblNome.Text = GetDisplay(typeof(Person), "FirstName") + ":";
Я могу использовать более элегантный синтаксис, используя Generics, например:
string GetDisplay<T>(string property)
{
PropertyInfo propInfo = typeof(T).GetProperty(property);
DisplayAttribute attr = propInfo.GetCustomAttributes(false).OfType<DisplayAttribute>().FirstOrDefault();
return (attr == null) ? propInfo.Name : attr.Name;
}
И вызов:
GetDisplay<Person>("FirstName");
Итак, я хотел бы сделать его более элегантным, используя лямбда-выражения, поворачивающие вызов следующим образом:
GetDisplay<Person>(p => p.FirstName);
Вопрос в том, как этого добиться?