.NET - как работает IndexOf, если я не реализую IComparable в своем классе? - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть коллекция пользовательских объектов, и я делаю IndexOf, чтобы найти индекс определенного объекта. Я бы предположил, что IndexOf будет использовать реализацию IComparable для проверки соответствия объектов, но я не реализую это в своем классе.

Как IndexOf определяет, что два объекта равны?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 17 декабря 2009

Непонятно, какой тип вы называете IndexOf в любом случае, но большинство коллекций все равно не будет использовать IComparable - они просто будут использовать Equals и будут выполнять линейный поиск. Если вы не переопределили Equals (или не реализовали IEquatable<T>), класс будет сравниваться по идентификатору ссылки, а структура будет автоматически генерировать сравнения на равенство. IComparable будет использоваться для чего-то вроде двоичного поиска в отсортированном списке.

2 голосов
/ 17 декабря 2009

С MSDN для списка (T). Метод индекса:

Этот метод определяет равенство, используя компаратор равенства по умолчанию EqualityComparer (T). По умолчанию для T, тип значения в списке.

1 голос
/ 17 декабря 2009

Сравнение выполняется с использованием EqualityComparer<T>.Default.

EqualityComparer<T>.Default вернет реализацию по умолчанию, если она существует ... в противном случае она использует реализацию, основанную на Object.Equals(), которая, как я предполагаю, используется в вашем случае.

Если вы не переопределите Equals() или не внедрили IEquatable<T>, Object.Equals() будет проверять только на равенство ссылок.

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