Вот достаточно примера использования выражений , чтобы получить имя свойства или поля для начала работы:
public static MemberInfo GetMemberInfo<T, U>(Expression<Func<T, U>> expression)
{
var member = expression.Body as MemberExpression;
if (member != null)
return member.Member;
throw new ArgumentException("Expression is not a member access", "expression");
}
Телефонный код будет выглядеть так:
public class Program
{
public string Name
{
get { return "My Program"; }
}
static void Main()
{
MemberInfo member = ReflectionUtility.GetMemberInfo((Program p) => p.Name);
Console.WriteLine(member.Name);
}
}
Тем не менее, предостережение: простая оценка (Program p) => p.Name
на самом деле включает в себя довольно много работы (и может занимать измеримое количество времени). Попробуйте кэшировать результат, а не вызывать метод часто.