.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);
- }
- };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д