gpt4 book ai didi

c# - LINQ执行流程(作业)

转载 作者:太空狗 更新时间:2023-10-29 22:25:16 24 4
gpt4 key购买 nike

我不明白下面代码的执行顺序。这里满足第一个Where子句的数字是(4, 10, 3, 7),满足第二个Where子句的数字是2和1,之后我们有函数 Aggregate 可以减去它们并从两者中生成一个元素。

我的问题是这里的执行流程是什么 - (1) Where 对所有元素执行 c/3 > 0 之后 (2) Where 或 (1) 为一个元素执行第一个子句并将其传递给 (2) 并从那里聚合 - 当我打印值时,我无法使用这两种方法在纸上将 x 的值设为 28 我也无法调试 linq 语句.提前感谢您的帮助。

var ints = new int[] { 2, 4, 1, 10, 3, 7 };

var x = ints
.Where(c => c / 3 > 0) <-- (1)
.Select(s2 => s2 + ints
.Where(c => c / 3 == 0) <-- (2)
.Aggregate((f, s) => f - s))
.Sum();

最佳答案

同样的语句可以写成如下:

var ints = new int[] { 2, 4, 1, 10, 3, 7 };

var x = ints
.Where(c =>
{
Console.WriteLine($"1 Where for number: {c}");
return c / 3 > 0;
}) //< --(1)
.Select(s2 => s2 + ints
.Where(c =>
{
Console.WriteLine($"2 Where for number: {c}");
return c / 3 == 0;
}) // < --(2)
.Aggregate((f, s) =>
{
Console.WriteLine($"Aggregate: f: {f} s: {s}");
return f - s;
}))
.Sum();

在这里,每个速记 lambda 表达式都可以写成一个带有方法体的完整匿名方法。您只需要使用 { .. }括弧。在它们里面你可以写多条语句。如果您查看 Where 的文档你可以看到它期望(在你的情况下)一个 Func<int, bool>作为输入参数。这意味着你传递了一个 int里面并返回一个bool .这就是为什么您需要像我一样编写明确的 return 语句:return c / 3 > 0;

如果您现在将调试输出插入到控制台,您将获得书面证明并深入了解整个代码隔间的执行情况。

结果输出如下所示:

1 Where for number: 2
1 Where for number: 4
2 Where for number: 2
2 Where for number: 4
2 Where for number: 1
Aggregate: f: 2 s: 1
2 Where for number: 10
2 Where for number: 3
2 Where for number: 7
1 Where for number: 1
1 Where for number: 10
2 Where for number: 2
2 Where for number: 4
2 Where for number: 1
Aggregate: f: 2 s: 1
2 Where for number: 10
2 Where for number: 3
2 Where for number: 7
1 Where for number: 3
2 Where for number: 2
2 Where for number: 4
2 Where for number: 1
Aggregate: f: 2 s: 1
2 Where for number: 10
....
....

关于c# - LINQ执行流程(作业),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56163387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com