c# - 获取 lambda 表达式的 MethodInfo

标签 c# .net reflection lambda

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

我正在寻找这样的东西:

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

更新 无论 lambda 的主体是否是方法调用表达式,我都想获取方法信息,即无论 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), /*...???... */);

最佳答案

你很接近:)

你可以这样做:

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

注意:如果一个委托(delegate)实例有多个“订阅者”,这可能会出现问题。

引用:https://learn.microsoft.com/en-us/dotnet/api/system.delegate.method

关于c# - 获取 lambda 表达式的 MethodInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27792849/

相关文章:

c# - 将 Azure 网站转换为 Web 角色

c# - WP7如何获取当前歌曲

java - 尝试运行我的 java swing 应用程序时,Win Vista 上缺少 msvcr71.dll 文件

c# - 通用 Windows 窗体模板

haskell - 列出 Haskell 类型的构造函数名称?

c# - .Net Web 服务书籍

c# - 在源代码中存储加密 key 有多安全?

.net - 在服务器应用程序中存储无法散列的密码

.net - Compact Framework - Image.FromStream (Stream, Boolean, Boolean) 的任何实现?

java - 为什么 Java Reflection 找不到另一个包中类的包私有(private)构造函数?