获取lambda表达式的MethodInfo

Wat*_* v2 6 .net c# reflection lambda

我知道我问的是奇怪但只是为了踢,是否有可能得到MethodInfo一个lambda表达式?

我是这样的:

(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();
  }
}
Run Code Online (Sandbox Code Playgroud)

但我想要这个工作:

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

var convertExpression5 = Expression.ConvertChecked(intExpression, typeof(Dog), /*...???... */);
Run Code Online (Sandbox Code Playgroud)

lep*_*pie 9

你很接近:)

你可以这样做:

MethodInfo meth = (new Func<int, string>(i => i.ToString())).Method;
Run Code Online (Sandbox Code Playgroud)

注意:如果您有一个委托实例的多个"订阅者",则可能会出现问题.

MSDN:http://msdn2.microsoft.com/en-us/library/system.delegate.method


Tim*_*lds 8

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

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

  • 不,等等。这仅适用于这个特定的示例。我的错。我应该澄清一下。我希望它能够工作,无论 lambda 的主体包含什么。这个解决方案假设 lambda 的主体是一个方法调用表达式,这是我的错,因为我给出了这样的例子。 (2认同)