1

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

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

但它一直返回null。

4

1 回答 1

6

有四点不对:

  • 没有“lambda 参数”之类的东西。Lambda 表达式通常用于为方法提供参数,但它们被转换为委托或表达式树
  • 你错过了Queryable.Any-的第一个参数IQueryable<T>
  • 您正在使用Func<ObjType, bool>which 是委托类型,而不是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方法。目前尚不清楚您将如何处理它。

于 2012-12-11T14:07:39.357 回答