ReSharper не пытается выполнить глубокую проверку коллекции на равенство, так как он не знает, как это сделать для каждого типа коллекции (и что именно означает «тип коллекции»?).Кроме того, большинство типов изменяемых коллекций представлены сложными объектами (например, хранящими в элементах сравнения равенства элементов), а не простыми «значениями» (в отличие от неизменяемых коллекций), которые можно легко проверить на равенство.
Всегда генерируетEnumerable.SequenceEquals()
не является хорошей идеей в большинстве случаев, поскольку он работает на слишком абстрактных IEnumerable<T>
интерфейсах - он даже не проверяет коллекции .Count
, чтобы вернуть false
рано.Кроме того, некоторые из набороподобных коллекций для двух равных наборов не гарантируют одинаковый порядок элементов при перечислении с использованием интерфейса IEnumerable<T>
.
Некоторые неизменяемые коллекции имеют специальные API для сравнения на равенство (как ни странно, ImmtableList
в отличие от ImmutableHashSet.SetEquals
) такого API нет, но у ReSharper нет специальных знаний по таким API.Имея все это в виду, мы решили придерживаться генерации вызовов object.Equals()
, предоставляя пользователю возможность уточнить намерения.Возможно, нам следует создать комментарий в сгенерированном коде, поясняющий это ...
В вашем конкретном случае я предлагаю сначала сравнить .Count
из ImmutableList
и использовать Enumerable.SequenceEquals()
после.