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