簡體   English   中英

LINQ然后按圈

[英]LINQ ThenBy in circle

為什么我在gg中有不同的結果?

  1. 版:

     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(); 
  2. 版:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM