Linq'equals'关键字重新访问 - 它是否比较对象的值和引用?

时间:2009-12-20 15:14:16

标签: .net linq join equals

这个问题是link text的后续问题,因此在标题中重新审视。我将此作为一个新问题提出,因为在原始问题下所接受的答案和评论都表明,连接查询中使用的equals关键字仅指比较中的值类型。我认为这是误导如下。

在幕后,默认的相等比较器用于使用键控查找来比较键。连接在Enumerable.Join中实现,键可以是值或引用。

另一个答案中包含使用POCO的示例。我只能假设因为在主键上Linq to Sql中使用了连接,因此这些通常是简单的值类型,这就是出现混乱的地方。

等于比较值和对象的引用吗?

我弄错了吗?

1 个答案:

答案 0 :(得分:2)

正如您在问题中所述,equals关键字使用EqualityComparer<T>.Default。因此,它将与EqualityComparer<T>.Default比较的方式进行比较。

如果您想按值进行比较,可以制作工具IEquatable<T>