Есть ли способ последовательно сортировать / упорядочивать объекты по ссылке в C #? - PullRequest
0 голосов
/ 04 декабря 2018

Итак, у меня есть несколько object экземпляров, и я хочу расположить их в согласованном порядке.Неважно, каков порядок, пока я могу повторить его на любой паре экземпляров и получить тот же порядок.(Допустим, уникальные экземпляры.)

Есть ли способ сделать это, не полагаясь на значения экземпляров?(Я знаю, что RuntimeHelpers.GetHashCode может получить непротиворечивый хеш для каждого экземпляра, не беспокоясь о его значении, но хеш не гарантированно будет уникальным.)

По сути, я прошу реализацию IComparer<object>.

1 Ответ

0 голосов
/ 04 декабря 2018

Есть ли способ сделать это, не полагаясь на значения экземпляров?

Нет.

Действительно?

Что ж, вы могли бы сделать таблицу слабых ссылок, отображающую объекты в направляющие, а затем ваша сортировка могла бы найти объект в таблице слабых ссылок, получить guid и затем отсортировать по guid.

Это дорого, но это выполнимо.

Это должна быть слабая справочная таблица, потому что в противном случае вы в основном разрушаете способность сборщика мусора освобождать любой объект, который когда-либо сортировался по вашей схеме.

Я знаю, что RuntimeHelpers.GetHashCode может получать согласованный хеш для каждого экземпляра, не беспокоясь о его значении, но хеш не гарантированно будет уникальным.

Это правильно.Если вы используете GetHashCode для чего-то другого, кроме балансировки хеш-таблицы, вы почти наверняка делаете что-то не так.Это не уникальный идентификатор, и он не стабилен.

Я прошу реализацию IComparer<object>.

Вам придетсяжить с разочарованием.Полное упорядочение ссылочных объектов независимо от их значений не является службой, предоставляемой .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...