У меня есть простой пользовательский класс Point:
public class Point: IEqualityComparer<Point>
{
public double X;
public double Y;
public double Z;
private double[] startPointCoords;
public Point()
{
}
public Point(double[] pointArray)
{
this.startPointCoords = pointArray;
X = pointArray[0];
Y = pointArray[1];
Z = pointArray[2];
}
public bool Equals(Point x, Point y)
{
if(x.X == y.X && x.Y == y.Y && x.Z == y.Z)
{
return true;
}
return false;
}
public int GetHashCode(Point obj)
{
string xString = X.ToString().Replace(".", "");
string yString = Y.ToString().Replace(".", "");
string zString = Z.ToString().Replace(".", "");
int xInt = Convert.ToInt32(xString);
int yInt = Convert.ToInt32(yString);
int zInt = Convert.ToInt32(zString);
return xInt - yInt + zInt;
}
}
Я использую этот класс в словаре. Я проверяю, был ли экземпляр точки добавлен в словарь, используя:
if (!pointsToProcess.ContainsKey(startPoint))
{
pointsToProcess.Add(startPoint, startPoint);
}
Я отлаживаю свой код, чтобы убедиться, что Equals работает правильно. Моя точка останова, которую я установил в Point.Equals, никогда не срабатывает. Я установил точку останова в Point.GetHashCode, и она никогда не срабатывает. Кажется, что они не используются.
Я знаю, что есть классы, называемые Point in. Net. Я абсолютно уверен, что все точки, которые у меня есть в моем коде, взяты из моего пользовательского пространства имен.
Почему мои Point.Equals и Point.GetHashCode не будут достигнуты при установке точки останова?