获取 lambda 表达式的 MethodInfo

Get MethodInfo for a lambda expression

我知道我问的很奇怪,但只是为了好玩,是否有可能获得 lambda 表达式的 MethodInfo

我正在寻找这样的东西:

(Func<int, string>(i => i.ToString())).MethodInfo

更新 我想获取方法信息,而不管 lamda 的主体是否是方法调用表达式,即无论 lambda 的主体是什么类型的表达式。

所以,例如

这可能有效。

var intExpression = Expression.Constant(2);
Expression<Func<int, Dog>> conversionExpression = i => Program.GetNewDog(i);

var convertExpression5 = Expression.ConvertChecked(intExpression, typeof(Dog), ((MethodCallExpression)(conversionExpression.Body)).Method);

class Program
{
  static Dog GetNewDog(int i)
  {
    return new Dog();
  }
}

但我什至希望它能工作:

var intExpression = Expression.Constant(2);
Expression<Func<int, Dog>> conversionExpression = i => new Dog();

var convertExpression5 = Expression.ConvertChecked(intExpression, typeof(Dog), /*...???... */);

使用 System.Linq.Expressions 命名空间,您可以执行以下操作。

Expression<Func<int, string>> expression = i => i.ToString();
MethodInfo method = ((MethodCallExpression)expression.Body).Method;

你很接近:)

你可以这样做:

MethodInfo meth = (new Func<int, string>(i => i.ToString())).Method;

注意:如果您有多个 'subscribers' 委托实例,这可能会出现问题。

参考:https://docs.microsoft.com/en-us/dotnet/api/system.delegate.method