Dan Violet Sagmiller (He/Him)
asked on
C#, override Equals() & operator==, list<obj>.contains will not return true.
I have a class where I have overridden "==" and "Equals()", which does work to return true when comparing two different IntVector2's with identical values.
However, I try using it as a Key in a dictionary, and it will not return anything, so I have to use the following code to get the object reference I want.
What do I need to do so a dictionary can use a custom object as a key like this?
However, I try using it as a Key in a dictionary, and it will not return anything, so I have to use the following code to get the object reference I want.
IntVector2 iv = new IntVector2(x, y);
foreach(IntVector2 iv2 in this.HeightMap.Keys)
{
if(iv2 == iv)
{
iv = iv2;
break;
}
}
What do I need to do so a dictionary can use a custom object as a key like this?
public class IntVector2
{
public int X = 0;
public int Y = 0;
public IntVector2 (int x, int y)
{
this.X = x;
this.Y = y;
}
public static bool operator ==(IntVector2 v1, IntVector2 v2)
{
return (v1.X == v2.X) && (v1.Y == v2.Y);
}
public static bool operator !=(IntVector2 v1, IntVector2 v2)
{
return (v1.Y != v2.Y) || (v1.X != v2.X);
}
public override bool Equals (object obj)
{
if(obj is IntVector2)
{
IntVector2 v1 = (IntVector2)obj;
return (v1.X == this.X) && (v1.Y == this.Y);
}
return false;
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER