【问题标题】:How to invoke with reflection a method that accepts a Func<> parameter?如何通过反射调用接受 Func<> 参数的方法?
【发布时间】:2021-02-04 08:40:07
【问题描述】:

当我尝试在MethodInfo.Invoke 的数组中添加Func&lt;&gt; 参数时,它给了我无法将方法组转换为对象的错误。

我该如何处理?

方法的签名:

static bool Something(Func&lt;Expression, Expression, BinaryExpression&gt; body)

我正在传递的内容:

MethodInfo.Invoke(null, new object[] { Expression.Subtract }); // compilation error

CS0428 无法将方法组“减去”转换为非委托类型“对象”。您是否打算调用该方法?

【问题讨论】:

  • 我添加了正确的错误信息和更多的研究。应该是好的……还是奇怪的……不确定。随意恢复。但是请解释错误消息的不清楚之处...

标签: c# .net .net-core methods reflection


【解决方案1】:

确实没有从方法组到object的转换,但是从方法组到兼容委托类型(method group conversions)的转换,也有从委托类型到@的转换987654323@。所以你可以先将方法组通过强制转换转换为Func&lt;Expression, Expression, BinaryExpression&gt;,然后可以隐式转换为object

someMethodInfo.Invoke(null, new object[] { (Func<Expression, Expression, BinaryExpression>)Expression.Subtract });

【讨论】:

  • @SpiritBob 或者换句话说,C# 不知道你想要创建什么委托类型,通常它会推断出这个。
猜你喜欢
  • 2016-04-25
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多