如何使用反射调用接受 Func<> 参数的方法?

时间:2021-02-04 08:40:07

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

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

我该如何处理?

方法的签名:

static bool Something(Func<Expression, Expression, BinaryExpression> body)

我正在传递的内容:

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

<块引用>

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

1 个答案:

答案 0 :(得分:2)

确实没有从方法组到 object 的转换,但是有从方法组到兼容委托类型 (method group conversions) 的转换,并且还有从将类型委托给 object。因此,您可以先使用强制转换将方法组转换为 Func<Expression, Expression, BinaryExpression>,然后可以将其隐式转换为 object

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