.NET 4.x IComparable, ArrayList.Sort - C#

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

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

При вызове Sort вылетает ошибка "Дополнительные сведения: Сбой при сравнении двух элементов массива.". Не могли бы вы объяснить, в чем дело? Интерфейс реализовал же.
namespace Geometry
{
    abstract class Figure : IComparable<Figure>
    {
        public virtual float GetS()
        {
            return 0;
        }
        public int CompareTo(Figure other)
        {
            if (other == null)
                return 1;
 
            return GetS().CompareTo(other.GetS());
        }
    };
    class Rectangle : Figure
    {
        public Rectangle(float w = 0, float h = 0)
        {
            _w = w;
            _h = h;
        }
        public override float GetS()
        {
            return _w * _h;
        }
 
        public float W
        {
            get { return _w; }
            set { _w = value; }
        }
        public float H
        {
            get { return _h; }
            set { _h = value; }
        }
 
        private float _w, _h;
    };
    class Square : Rectangle
    {
        public Square(float a = 0)
            : base(a, a)
        {
 
        }
    };
    class Circle : Figure
    {
        public Circle(float r = 0)
        {
            _r = r;
        }
        public override float GetS()
        {
            return (float)(Math.PI * _r * _r);
        }
 
        public float R
        {
            get { return _r; }
            set { _r = value; }
        }
 
        private float _r;
    };
}
static void Main(string[] args)
        {
            Geometry.Figure rect = new Geometry.Rectangle(20, 30),
                            sqr = new Geometry.Square(5),
                            cir = new Geometry.Circle(10);
            ArrayList arr = new ArrayList();
            arr.Add(rect);
            arr.Add(sqr);
            arr.Add(cir);
            arr.Sort(); // тут ошибка
            Console.ReadLine();
        }

Решение задачи: «.NET 4.x IComparable, ArrayList.Sort»

textual
Листинг программы
abstract class Figure : IComparable<Figure>, IComparable
    {
        public virtual float GetS()
        {
            return 0;
        }
        public int CompareTo(Figure other)
        {
            if (other == null)
                return 1;
 
            return GetS().CompareTo(other.GetS());
        }
        public int CompareTo(object other)
        {
            return CompareTo(other as Figure);
        }
    };

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


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

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

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