我想知道为什么使用匿名类型可以实现GroupBy功能。
List<string> values = new List<string>();
values.GroupBy(s => new { Length = s.Length, Value = s })
匿名类型不实现任何接口,所以我很困惑这是如何工作的。
我假设该算法通过为源中的每个项目创建匿名类型的实例并使用哈希将项目分组来运行。但是,并没有提供IEqualityComparer来定义如何生成哈希或两个实例是否相等。然后,我会假设Object.Equals和Object.GetHashCode方法将是后备,依赖于对象标识。
那么,这是如何按预期工作的呢?为什么在OrderBy中不起作用?匿名类型是否重写了Equals和GetHashCode?还是基础GroupBy算法做了一些我没有考虑的魔术?
ToString
。它在调用GetHashCode
和Equals
。 - StriplingWarrior