相关疑难解决方法(0)

替换lambda表达式中的参数

考虑这段代码:

public class Foo
{
    public int a { get; set; }
    public int b { get; set; }
}

private void Test()
{
    List<Foo> foos = new List<Foo>();
    foos.Add(new Foo());
    foos.Add(new Foo());
    Expression<Func<Foo, int>> exp0 = f => f.a * f.b;
    Expression<Func<int>> exp1 = () => foos[0].a * foos[0].b;
    Expression<Func<int>> exp2 = () => foos[1].a * foos[1].b;
}
Run Code Online (Sandbox Code Playgroud)

你怎么能把exp0它变成两个与exp1和相同的表达式exp2.请注意,我不想仅为exp0每个Fooin 评估foos,而是获得两个新表达式.

[更新]:

基本上,我希望能够扩大或"扁平化"传递给A的表达Linq扩展方法,如Sum入枚举每个项目一个表达,因为这些枚举是静态的,因为我已经有代码读取不表达获取参数(然后将它们转换为另一种语言). …

c# lambda partial-application expression-trees

11
推荐指数
1
解决办法
9976
查看次数

通过输入参数来减少表达式

如果我有一个函数委托的表达式,它接受许多参数,如下所示:

Expression<Func<int, int, int, bool>> test = (num1, num2, num3) => num1 + num2 == num3;
Run Code Online (Sandbox Code Playgroud)

是否有一种方式/如何替换其中一个值(比如5 num1)并获得等效表达式:

Expression<Func<int, int, bool>> test = (num2, num3) => 5 + num2 == num3;
Run Code Online (Sandbox Code Playgroud)

编辑:

还需要解决复杂类型,例如:

    Expression<Func<Thing, int, int>> test = (thing, num2) => thing.AnIntProp + num2;
Run Code Online (Sandbox Code Playgroud)

.net c# lambda delegates

8
推荐指数
1
解决办法
1096
查看次数