Подумайте, что у меня есть класс, как показано ниже:
public class Foo
{
public int Bar { get; set; }
public int Sum(int a, int b)
{
return a + b;
}
public int Square(int a)
{
return a * a;
}
}
Все, что вы знаете, что я могу написать метод, который возвращает имя данного свойства:
var name = GetPropertyName<Foo>(f => f.Bar); //returns "Bar"
Метод GetPropertyName может быть легко реализован, как показано ниже:
public static string GetPropertyName<T>(Expression<Func<T, object>> exp)
{
var body = exp.Body as MemberExpression;
if (body == null)
{
var ubody = (UnaryExpression)exp.Body;
body = ubody.Operand as MemberExpression;
}
return body.Member.Name;
}
Но я хочу получить имя метода так же легко, как имя свойства, как показано ниже:
var name1 = GetMethodName<Foo>(f => f.Sum); //expected to return "Sum"
var name2 = GetMethodName<Foo>(f => f.Square); //expected to return "Square"
Можно ли написать такой метод GetMethodName?
Обратите внимание, что: GetMethodName должно быть независимым от подписи или возвращаемого значения данного метода.