【问题标题】:How to use typeof(object).GetMethod() with lambda parameter如何使用带有 lambda 参数的 typeof(object).GetMethod()
【发布时间】:2012-12-11 13:51:22
【问题描述】:

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

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

但它一直返回 null。

【问题讨论】:

标签: c# lambda


【解决方案1】:

有四件事不对:

  • 没有“lambda 参数”之类的东西。 Lambda 表达式通常用于为方法提供参数,但它们被转换为委托或表达式树
  • 你错过了Queryable.Any 的第一个参数 - IQueryable&lt;T&gt;
  • 您使用的是委托类型Func&lt;ObjType, bool&gt;,而不是表达式树类型Expression&lt;Func&lt;ObjType, bool&gt;&gt;
  • 很遗憾,您无法通过这种方式获得泛型方法。

你想要:

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

这应该会为您提供相关的Any 方法。目前尚不清楚您将如何处理它。

【讨论】:

  • 谢谢,确实明白了。是的,对不起,这不是一个措辞最好的问题。我正在尝试为动态 Any 查询组合一个表达式。了解如何在这里 - stackoverflow.com/questions/326321/… 感谢您的帮助!
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2019-11-18
相关资源
最近更新 更多