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

时间:2012-12-11 13:51:23

标签: c# lambda

如何使用Type.GetMethod()来获取具有lambda参数的方法?我试图使用这个来获取像Func这样的参数的Queryable.Any方法:

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

但它一直返回null。

1 个答案:

答案 0 :(得分: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));

这应该会为您提供相关的Any方法。目前尚不清楚你将采取什么措施。