Есть ли способ сделать это, не полагаясь на значения экземпляров?
Нет.
Действительно?
Что ж, вы могли бы сделать таблицу слабых ссылок, отображающую объекты в направляющие, а затем ваша сортировка могла бы найти объект в таблице слабых ссылок, получить guid и затем отсортировать по guid.
Это дорого, но это выполнимо.
Это должна быть слабая справочная таблица, потому что в противном случае вы в основном разрушаете способность сборщика мусора освобождать любой объект, который когда-либо сортировался по вашей схеме.
Я знаю, что RuntimeHelpers.GetHashCode может получать согласованный хеш для каждого экземпляра, не беспокоясь о его значении, но хеш не гарантированно будет уникальным.
Это правильно.Если вы используете GetHashCode
для чего-то другого, кроме балансировки хеш-таблицы, вы почти наверняка делаете что-то не так.Это не уникальный идентификатор, и он не стабилен.
Я прошу реализацию IComparer<object>
.
Вам придетсяжить с разочарованием.Полное упорядочение ссылочных объектов независимо от их значений не является службой, предоставляемой .NET.