如何使用带有lambda参数的typeof(object).GetMethod()

Bon*_*lin 1 c# lambda

如何使用Type.GetMethod()来获取具有lambda参数的方法?我正在尝试使用以下方法获取类似Func的参数的Queryable.Any方法:

typeof(Queryable).GetMethod("Any", new Type[]{typeof(Func<ObjType, bool>)})
Run Code Online (Sandbox Code Playgroud)

但它一直返回null.

Jon*_*eet 6

有四件事错了:

  • 没有"lambda参数"这样的东西.Lambda表达式通常用于为方法提供参数,但它们被转换为委托或表达式树
  • 你错过了第一个参数Queryable.Any-IQueryable<T>
  • 您使用的Func<ObjType, bool>是委托类型,而不是Expression<Func<ObjType, bool>>表达式树类型
  • 不幸的是,你无法以这种方式获得通用方法.

你要:

var generic = typeof(Queryable).GetMethods()
                               .Where(m => m.Name == "Any")
                               .Where(m => m.GetParameters().Length == 2)
                               .Single();
var constructed = generic.MakeGenericMethod(typeof(ObjType));
Run Code Online (Sandbox Code Playgroud)

那会给你相关的Any方法.目前尚不清楚你将采取什么措施.