【发布时间】:2015-11-13 21:12:50
【问题描述】:
让我们考虑Polygon 类。检查相等性应该在大多数情况下比较引用,但在许多情况下值相等会派上用场(例如当一个比较两个多边形与 Assert.AreEqual 时)。
我的想法是让价值平等在某种程度上仅次于引用平等。在这种情况下,很明显==operator 应该保留其默认的引用检查实现。
那么object.Equals() 和IEquatable<Polygon>.Equals() 呢? MSDN 并不暗示 == 和 .Equals() 应该做同样的事情,但仍然 - 它不会使 Polygon 对象的行为过于模棱两可吗?
另外,Polygon 类是可变的。
【问题讨论】:
-
他们不一样..
long story short.Equals used for object equality== used for checking equality of a value谷歌搜索更深入的澄清。为什么人们在这里问他们可以很容易找到答案的问题购买做一个简单的谷歌搜索I'm just Curious -
我不怪 OP 在这里提出这个问题。我发现 SO 是一个比谷歌搜索更有信誉的知情答案来源。而且,正如他所说,MSDN 并不总是清楚这些事情。
-
@MikeHofer 这个问题不是on topic on SO。
-
另请参阅Difference between Equals/equals and == operator?、What is the difference between == and Equals() for primitives in C#? 和C# .Equals(), .ReferenceEquals() and == operator 的相关讨论(这三个问题并不完全相同,但每个问题的充分讨论最终也解决了上述问题)。
标签: c# .net operator-overloading equals iequatable