Ключевое слово Linq 'equals' Revisited - сравнивает ли оно значения и ссылки на объекты? - PullRequest
2 голосов
/ 20 декабря 2009

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

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

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

Значит, равные сравнивают значения и ссылки на объекты?

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

1 Ответ

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

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

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

...