Сравнение двух объектов на эквивалентность - C#
Формулировка задачи:
Есть такой код (часть):
В результате получаю ошибку переполнения стека. Не ожидал, что для сравнения с null вызовется оператор.
Как лучше всего разорвать эту петлю?
static void Main(string[] args) { Point p1 = new Point(); Point p2 = new Point(5); Object o1 = new Point(5); Console.WriteLine(o1.Equals(p2)); // проблема возникает тут } class Point : IComparable, IComparable<Point>, IComparer<Point> { private int x; private int y; private double vector; public Point(int x, int y) { this.x = x; this.y = y; vector = Math.Sqrt(x * x + y * y); } public Point(int xy) : this(xy, xy) { } public Point() : this(0, 0) { } public override bool Equals(object obj) { Point other = obj as Point; if (this == null && other == null) // тут происходит вызов оператора класса "==" return true; if (other == null) return false; else { if (x == other.x && y == other.y) return true; } return false; } public override int GetHashCode() { return (int)vector ^ (x | y); } public static bool operator ==(Point point1, Point point2) { if (point1 == null & point2 == null) // в операторе вызывается Equals() return true; if (point2 != null) return false; return point1.Equals(point2); } public static bool operator !=(Point point1, Point point2) { return point1.Equals(point2); } public static bool operator >(Point point1, Point point2) { if ((point1.vector > point2.vector) || (point1.vector == point2.vector && point1.x > point2.x) || (point1.vector == point2.vector && point1.x == point2.x && point1.y > point2.y)) return true; return false; } public static bool operator <(Point point1, Point point2) { return !(point1 > point2); } } }
Решение задачи: «Сравнение двух объектов на эквивалентность»
textual
Листинг программы
if (ReferenceEquals(point1, null) && ReferenceEquals(point2, null)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д