c# - 集合中的排序值仅在循环中可见
问题描述
我有以下代码对匿名集合中的值进行分组和排序。当我处于排序循环中时,我看到值已正确排序。循环之后,它们仍然在未分类的地方......为什么?
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)));
}
解决方案
为什么?
因为这groups
是一个可枚举的序列而不是一个集合。在迭代之前调用ToList()
or :ToArray()
var groups = (from g in Lista
group g.P2 by g.P1 into g
select new { KeyGroup = g.Key, Rect = g.ToList() }).ToArray();
推荐阅读
- javascript - 如何存储和检索从 Firebase 到应用程序的 URL
- typescript - 如何使用 Object.fromEntries 将 js Map 转换为 typescript 中的对象
- jenkins - Jenkins Blue Ocean 在参数化构建中使用凭证
- snowflake-cloud-data-platform - Snowpipe 中的特殊字符,如 ñ 和 ß
- javascript - 在 Chrome 中为图像使用“预取”链接
- sql - Django多对多:在一个相关查询集中获取元素但排除其他相关查询集中元素的最佳方法?
- mysql - 如何删除包含引用多行(MySQL)的外键的行?
- c# - 用加号解码字符串
- javascript - 在 bash 脚本中获取带有 javascript 元素的 HTML 页面
- python - 在 Python 中使用 break 和 if 语句编写小程序