为什么我在 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的结果,但我需要循环
答案 0 :(得分:0)
这是因为在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);