我想调用这样的方法:
签名: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)
答案 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)