c#函数式编程

本文关键字:编程 函数 | 更新日期: 2023-09-27 18:13:49

我不明白为什么下面的代码有输出230。请帮助。代码和输出如下所示。您可以使用linqpad编辑下面的代码,也可以阅读下面的代码。

void Main() {
    int ten = 10;
    int twenty = 20;
    int thirty = 30;
    int temp = 10.Where(t => 20); // X.Where(10,20);
    int result0 = temp.Select(t => 30);  
    result0.Dump("result0");
    int result1 = 
        from c in ten 
        where twenty 
        select thirty;    
    result1.Dump("result1");
    int result2 = 
        ten.Where(t => twenty).Select(t => thirty);
    result2.Dump("result2");
}
static class X {
    public static int Where(this int c, Func<int, int> f) {
        return c * f(0); 
    }
    public static int Select(this int c, Func<int, int> f) {
        return c + f(0); 
    }
}
输出:

result0
230 
result1
230 
result2
230

c#函数式编程

静态方法Where返回c * f(0)静态方法Select返回c + f(0)

int temp = 10.Where(t => 20);行将产生10 * 20 = 200
int result0 = temp.Select(t => 30);行将产生200 + 30 = 230

附加代码只是使用不同的语法执行相同的计算。
因此,结果是一个可预测的230

如果你想知道为什么f(0)中的零不产生零。
不管t如何,lambda t => 20返回20
如果您希望返回该值,则需要将其更改为t => t