OrderBy/ThenBy循环——C#中的嵌套列表我有一个嵌套列表,Listintable;我想对所有列进行排序的地方。问题是列数取决于用户输入。像这样对列表进行排序工作正常(假设此示例有4列)vartmp=intable.OrderBy(x=>x[0]);tmp=tmp.ThenBy(x=>x[1]);tmp=tmp.ThenBy(x=>x[2]);tmp=tmp.ThenBy(x=>x[3]);intable=tmp.ToList();然而,当我把它放在一个循环中时,像这样:vartmp=intable.OrderBy(x=>x[0]);对于(inti=1;ix[i]);}intable=tmp.ToList();它不再正常工作,只对第四列进行排序。这是访问修改后的闭包的情况。将您的代码更改为此,它将起作用:vartmp=intable.OrderBy(x=>x[0]);对于(inti=1;ix[thisI]);}intable=tmp.ToList();EricLippert写了一篇由两部分组成的文章来描述这个问题。它没有按预期工作的原因-简而言之-是因为当您调用ToList()时,LINQ仅在使用i的最后一个值时计算。这和你写的一样:vartmp=intable.OrderBy(x=>x[0]);tmp=tmp.ThenBy(x=>x[3]);tmp=tmp.ThenBy(x=>x[3]]);tmp=tmp.ThenBy(x=>x[3]);intable=tmp.ToList();创建比较器类StringListComparer:IComparer>{publicintCompare(Listx,Listy){intminLength=Math.Min(x.Count,y.Count);for(inti=0;iandthensortthelist这样C#学习教程,希望大家多多关注—intable.Sort(newStringListComparer());删除,如需转载请注明出处:
