Ключевое слово Linq 'equals' Revisited - сравнивает ли оно значения и ссылки на объекты?
Этот вопрос является последующим для ссылки на текст, следовательно, вновь в заголовке. Я поднимаю этот вопрос как новый вопрос, поскольку принятый ответ и комментарий, сделанные в рамках исходного вопроса, предполагают, что ключевое слово equals, используемое в запросе соединения, относится только к типам значений в сравнении. Я считаю, что это вводит в заблуждение следующим образом.
За кулисами для сравнения ключей используется поиск равенства по умолчанию. Объединение реализовано в Enumerable.Join, и ключ может быть либо значением, либо ссылкой.
В другой ответ был включен пример использования POCO. Я могу только предположить, что, поскольку соединения используются в Linq to Sql для первичных ключей, то, поскольку это часто простые типы значений, возникает путаница.
Так сравнивает ли equals значения и ссылки на объекты?
Я правильно понял?
1 ответ
Как вы, кажется, заявляете в своем вопросе, equals
использование ключевых слов EqualityComparer<T>.Default
, Таким образом, он будет сравнивать так же, как EqualityComparer<T>.Default
сравнивает.
Если вы хотите сравнить по значению, вы можете сделать IEquatable<T>