[英]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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.