Есть ли какой-либо встроенный тип коллекции (IEnumerable<S>
) или IEqualityComparer<T>
для IEnumerable<S>
в структуре, в котором Equals
(и GetHashCode
соответственно) определяется равенством элементов в нем?
Что-то типа:
var x = new SomeCollection { 1, 2, 3 };
var y = new SomeCollection { 1, 2, 3 };
// so that x.Equals(y) -> true
// and x.Shuffle().Equals(y) -> false
Or a
class SomeComparer<T> : EqalityComparer<IEnumerable<T>> { }
// so that for
var x = new[] { 1, 2, 3 };
var y = new[] { 1, 2, 3 };
// gives
// new SomeComparer<int>().Equals(x, y) -> true
// new SomeComparer<int>().Equals(x.Shuffle(), y) -> false
? Мой вопрос: есть ли что-то в фреймворке, которое ведет себя как SomeCollection
или SomeComparer<T>
, как показано в коде?
Зачем мне это нужно: потому что у меня есть случай для Dictionary<Collection, T>
, где часть Key
должна быть коллекцией, и ее равенство основано на ее элементах.
Требования:
- Коллекция должна быть только простым перечисляемым типом с методом
Add
- Порядок элементов важен
- В коллекции могут быть повторяющиеся элементы
Примечание. Я могу написать свой собственный, это тривиально. Есть много вопросов о том, как SO помогает с этим. Я спрашиваю, есть ли класс в самой структуре.
Enumerable.SequenceEqual
? - person Jon   schedule 09.11.2013HashSet<T>.CreateSetComparer()
, близок к тому, о чем вы просите, за исключением того, что по очевидным причинам набор хэшей не сохраняет порядок элементов. - person   schedule 09.11.2013