考虑以下设置:
class A { public int x; }
class B { public int y; }
static class Helper
{
public static Expression<Func<B>> BindInput(
Expression<Func<A, B>> expression,
A input)
{
//TODO
}
}
static void Main(string[] args)
{
Expression<Func<B>> e = Helper.BindInput(
(A a) => new B { y = a.x + 3 },
new A { x = 4 });
Func<B> f = e.Compile();
Debug.Assert(f().y == 7);
}
我想要在该方法中做的BindInput
是将表达式转换为input
嵌入其中。在 中的示例用法中Main
,结果表达式e
将是
() => new B { y = input.x + 3 }
input
传入的第二个值在哪里BindInput
。
我该怎么做呢?
编辑:
我应该补充一点,以下表达式e
不是我想要的:
((A a) => new B { y = a.x + 3 })(input)
这将是相当微不足道的,因为它只涉及在现有表达式的顶部添加一个层。