我可以将lambda表达式数组传递给带有参数的方法



我想调用这样的方法:

签名:void Method(object a, object b, params LambdaExpression[] expressions);

呼叫:Method(a, b, x => x.A, x => x.B)

可能吗?

让我们假设" x"的类型是常数类型。例如,如果x => x.a和y => y.b是funcs,则它们为 Func<TType,*>,使得参数数组始终具有TType的相同类型,但是返回值的类型*可能因参数的元素而有所不同大批。这就是为什么我必须选择更通用的东西,例如lambdaexpression作为类型,但我不知道这是否会起作用。我可以在运行时在方法中解开表达式,但是当他们的两个通用类型参数之一不同时,我很难将表达式传递给方法。

即使我不得不称其为: Method(a, b, (Type x) => x.A, (Type x) => x.B)

,也可以了

您可以将代码转换为表达式(vs汇编(的编译器辅助功能仅适用于仿制药。所以你必须

Expression<Func<TType, AType>> expr1 = x => x.A;
Expression<Func<TType, BType>> expr2 = x => x.B;
Method(a, b, expr1, expr2);

或铸造内联

Method(a, b, (Expression<Func<TType, AType>>) (x => x.A), expr2)

或使用更通用的参数

void Method(object a, object b, params Expression<Func<object, object>>[] expressions)

最新更新