LINQ ThenBy 循环
LINQ ThenBy in circle
为什么我在 gg 中有不同的结果?
版本:
var kk = ff.OrderBy(el => el.path[0]);
for (var i = 1; i <= 2; i++)
{
kk = kk
.ThenBy(el => el.path.Length > i
? el.path[i]
: 0);
}
var gg = kk.ToList();
版本:
var kk = ff.OrderBy(el => el.path[0]);
kk = kk
.ThenBy(el => el.path.Length > 1
? el.path[1]
: 0)
.ThenBy(el => el.path.Length > 2
? el.path[2]
: 0);
var gg = kk.ToList();
我需要版本 2 的结果,但我需要循环
这是因为在 lambda 表达式外部声明的任何变量都不会在 lambda 内部捕获,即您不会在每个 lambda 中创建 i
的多个版本。
例如,
List<Action> actions = new List<Action>();
for (int i = 0 ; i < 10 ; i++) {
actions.Add(() => Console.WriteLine(i));
}
actions.ForEach(x => x.Invoke());
打印 10
10 次,而不是您期望的 0 到 9 次。同样的事情发生在你的代码中。您的第一个代码片段等同于:
kk = kk
.ThenBy(el => el.path.Length > 1
? el.path[3]
: 0)
.ThenBy(el => el.path.Length > 2
? el.path[3]
: 0);
为什么我在 gg 中有不同的结果?
版本:
var kk = ff.OrderBy(el => el.path[0]); for (var i = 1; i <= 2; i++) { kk = kk .ThenBy(el => el.path.Length > i ? el.path[i] : 0); } var gg = kk.ToList();
版本:
var kk = ff.OrderBy(el => el.path[0]); kk = kk .ThenBy(el => el.path.Length > 1 ? el.path[1] : 0) .ThenBy(el => el.path.Length > 2 ? el.path[2] : 0); var gg = kk.ToList();
我需要版本 2 的结果,但我需要循环
这是因为在 lambda 表达式外部声明的任何变量都不会在 lambda 内部捕获,即您不会在每个 lambda 中创建 i
的多个版本。
例如,
List<Action> actions = new List<Action>();
for (int i = 0 ; i < 10 ; i++) {
actions.Add(() => Console.WriteLine(i));
}
actions.ForEach(x => x.Invoke());
打印 10
10 次,而不是您期望的 0 到 9 次。同样的事情发生在你的代码中。您的第一个代码片段等同于:
kk = kk
.ThenBy(el => el.path.Length > 1
? el.path[3]
: 0)
.ThenBy(el => el.path.Length > 2
? el.path[3]
: 0);