对于像 Point3 (例如)这样的引用类型(类),这是一个矫枉过正,缺乏:
#region System.Object Members
public override bool Equals ( object obj )
{
//return this == ( Point3 ) obj;
if ( obj == null )
{
return false;
}
if ( this.GetType ( ) != obj.GetType ( ) )
{
return false;
}
return this.Equals ( ( Point3 ) obj );
}
public override int GetHashCode ( )
{
return this.X.GetHashCode ( ) ^ this.Y.GetHashCode ( ) ^ this.Z.GetHashCode ( );
}
public override string ToString ( )
{
return String.Format ( "[{0}, {1}, {2}]", this.X, this.Y, this.Z );
}
#endregion
#region IEquatable<Point3> Members
public bool Equals ( Point3 other )
{
if ( other == null )
{
return false;
}
if ( ReferenceEquals ( this, other ) )
{
return true;
}
if ( this.GetHashCode ( ) != other.GetHashCode ( ) )
{
return false;
}
if ( !base.Equals ( other ) )
{
return false;
}
return this == other;
}
#endregion
public static bool operator == ( Point3 v0, Point3 v1 )
{
return ( v0.X.IsEqual ( v1.X ) ) && ( v0.Y.IsEqual ( v1.Y ) ) && ( v0.Z.IsEqual ( v1.Z ) );
}
public static bool operator != ( Point3 v0, Point3 v1 )
{
return !( v0 == v1 );
}
请为值和引用类型进行调整或发布一个新的,我可以在我的基本类型(值和引用)中使用它,而无需在每次我再次实现它时考虑太多。
编辑:这适用于不可变类型。