我可以将一个lambda表达式数组传递给带有params参数的方法吗?

时间:2017-05-05 22:54:43

标签: c# lambda parameters expression

我想调用这样的方法:

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

致电:Method(a, b, x => x.A, x => x.B)

有可能吗?

让我们假设&#39; x&#39;是一个常数类型。例如,如果x =&gt; x.A和y =&gt; yB是Funcs,它们是Func<TType,*>,因此params数组总是具有TType的相同类型,但返回值类型*可能与元素到params数组的元素。这就是为什么我必须选择像LambdaExpression这样更通用的东西作为类型,但我不知道这是否有用。我可以在运行时解压缩方法中的表达式,但是当他们的两个泛型类型参数之一不同时,我很难尝试将表达式传递给方法。

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

,也没关系

1 个答案:

答案 0 :(得分:2)

你可以,但编译器帮助将你的代码转换为表达式(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)