Мне интересно, почему 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 творит магию, о которой я даже не думал?