Ключевое слово Linq 'equals' Revisited - сравнивает ли оно значения и ссылки на объекты?

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

За кулисами для сравнения ключей используется поиск равенства по умолчанию. Объединение реализовано в Enumerable.Join, и ключ может быть либо значением, либо ссылкой.

В другой ответ был включен пример использования POCO. Я могу только предположить, что, поскольку соединения используются в Linq to Sql для первичных ключей, то, поскольку это часто простые типы значений, возникает путаница.

Так сравнивает ли equals значения и ссылки на объекты?

Я правильно понял?

1 ответ

Решение

Как вы, кажется, заявляете в своем вопросе, equals использование ключевых слов EqualityComparer<T>.Default, Таким образом, он будет сравнивать так же, как EqualityComparer<T>.Default сравнивает.

Если вы хотите сравнить по значению, вы можете сделать IEquatable<T>

Другие вопросы по тегам