The blog has moved to a new address. The blog is now located at http://devintelligence.com

Adsense

Thursday, January 31, 2008

How to support != and == operations for C# struct

Sometimes we prefer to use structs instead classes .The C# is a convenient way to store coordinates ,complex number etc .
In an example below I'm presenting how to support == and != operators in case we want to check if our structs are equal.

 

// <summary>
/// Circle
/// </summary>
struct Circle
{
public Point Center;
public double Radius;

/// <summary>
/// Compares two Circle objects. The result specifies whether the values
/// of the Center or Radius properties of the two Circle objects are equal.
/// </summary>
/// <param name="left">A Circle to compare.</param>
/// <param name="right">A Circle to compare.</param>
/// <returns>true if the the Center properties or the Radius properties
/// of left and right are equal; otherwise, false.</returns>
public static bool operator ==(Circle left, Circle right)
{
return (left.Center == right.Center) && (left.Radius == right.Radius);
}

/// <summary>
/// Compares two Circle objects. The result specifies whether the values
/// of the Center or Radius properties of the two Circle objects are unequal.
/// </summary>
/// <param name="left">A Circle to compare.</param>
/// <param name="right">A Circle to compare.</param>
/// <returns>true if the values of either the Center properties
/// or the Radius properties of left and right differ; otherwise, false.</returns>
public static bool operator !=(Circle left, Circle right)
{
return !(left == right);
}


/// <summary>
/// Specifies whether this Circle contains the same Center and Radius as
/// the specified Object.
/// </summary>
/// <param name="obj">Another object to compare to.</param>
/// <returns>
/// true if obj is a Point and has the same Center and Radius as this Circle.
/// </returns>
public override bool Equals(object obj)
{
if (!(obj is Circle))
{
return false;
}
Circle circle = (Circle)obj;
return (circle.Center == this.Center) && (circle.Radius == this.Radius);
}

/// .... You need to overload GetHashCode and ToString methods

}



Testing our struct ...




static void Main(string[] args)


Circle circle1 = new Circle();
circle1.Center = new Point(10, 10);
circle1.Radius = 20;


Circle circle2 = new Circle();
circle2.Center = new Point(10, 10);
circle2.Radius = 20;


bool result = (circle1==circle2);
Console.WriteLine("Is circle1 equal to circle2? [{0}]", result );

circle2.Center = new Point(14, 10);
result = (circle1 == circle2);
Console.WriteLine("Is circle1 equal to circle2? [{0}]", result);

Console.ReadLine();



 



Technorati Tags: ,,

No comments: