比如说Point2类,以及以下等于:
public override bool Equals ( object obj )
public bool Equals ( Point2 obj )
Run Code Online (Sandbox Code Playgroud)
这是有效C#3中显示的那个:
public override bool Equals ( object obj )
{
// STEP 1: Check for null
if ( obj == null )
{
return false;
}
// STEP 3: equivalent data types
if ( this.GetType ( ) != obj.GetType ( ) )
{
return false;
}
return Equals ( ( Point2 ) obj );
}
public bool Equals ( Point2 obj )
{
// …Run Code Online (Sandbox Code Playgroud) 在C#中,如果在覆盖Equals()时未能覆盖GetHashCode(),那么具体可能出现什么问题?
每次我写一些数据类时,我通常会花很多时间编写IEquatable实现.
我写的最后一堂课是这样的:
public class Polygon
{
public Point[] Vertices { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
实现IEquatable是非常有用的.当然C#3.0/LINQ有很多帮助,但顶点可以移位和/或以相反的顺序移动,这给Equals方法增加了很多复杂性.在经过多次单元测试和相应的实现后,我放弃了,并将我的应用程序更改为仅接受三角形,其中IEquatable实现只需要完全覆盖11个单元测试.
有什么工具或技术可以帮助实现Equals和GetHashCode吗?
来自MSDN
实现IComparable的类型必须覆盖Equals.Types,覆盖Equals也必须覆盖GetHashCode; 否则,Hashtable可能无法正常工作.
我没理得.谁能解释一下.