Сравнение двух объектов на эквивалентность - C#

Узнай цену своей работы

Формулировка задачи:

Есть такой код (часть):
        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);
        }
 
        }
    }
В результате получаю ошибку переполнения стека. Не ожидал, что для сравнения с null вызовется оператор. Как лучше всего разорвать эту петлю?

Решение задачи: «Сравнение двух объектов на эквивалентность»

textual
Листинг программы
if (ReferenceEquals(point1, null) && ReferenceEquals(point2, null)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы