Skip to main content
 首页 » 编程设计

c#之集合中的排序值仅在循环中可见

2024年02月04日28qq78292959

我有以下代码对匿名集合中的值进行分组和排序。当我在排序循环中时,我看到值已正确排序。循环后,它们仍然在未排序的地方.....为什么?

class Test 
{ 
    public Guid P1; 
    public int P2; 
} 
 
var Lista = new List<Test>(); 
 
Lista.Add(new Test() { P1 = Guid.Parse("D4651E83-67D6-4BCD-B28D-8173C5AE94F7"), P2 = 2 }); 
Lista.Add(new Test() { P1 = Guid.Parse("D4651E83-67D6-4BCD-B28D-8173C5AE94F7"), P2 = 1 }); 
 
Lista.Add(new Test() { P1 = Guid.Parse("310D74C4-0624-4B1C-9F4E-CB85924CB2B6"), P2 = 4 }); 
Lista.Add(new Test() { P1 = Guid.Parse("310D74C4-0624-4B1C-9F4E-CB85924CB2B6"), P2 = 3 }); 
 
var groups = from g in Lista 
                group g.P2 by g.P1 into g 
                select new { KeyGroup = g.Key, Rect = g.ToList() }; 
 
foreach (var x in groups) 
{ 
    x.Rect.Sort((a, b) => (a.CompareTo(b)));                
} 

请您参考如下方法:

why?

因为 groups 是一个可枚举的序列而不是一个集合。在对其进行迭代之前调用 ToList() 或 ToArray():

var groups = (from g in Lista 
              group g.P2 by g.P1 into g 
              select new { KeyGroup = g.Key, Rect = g.ToList() }).ToArray();