我想知道为什么 GroupBy 使用匿名类型。
List<string> values = new List<string>();
values.GroupBy(s => new { Length = s.Length, Value = s })
Run Code Online (Sandbox Code Playgroud)
匿名类型不实现任何接口,所以我很困惑这是如何工作的。
我假设该算法是通过为源中的每个项目创建匿名类型的实例并使用散列将项目组合在一起来工作的。但是,没有提供 IEqualityComparer 来定义如何生成哈希或两个实例是否相等。那么,我会假设 Object.Equals 和 Object.GetHashCode 方法将是后备方法,它们依赖于对象标识。
那么,这是如何按预期工作的呢?但它在 OrderBy 中不起作用。匿名类型会覆盖 Equals 和 GetHashCode 吗?或者底层的 GroupBy 算法是否做了一些我没有想到的魔法?