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
静态方法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