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

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

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

При вызове Sort вылетает ошибка "Дополнительные сведения: Сбой при сравнении двух элементов массива.". Не могли бы вы объяснить, в чем дело? Интерфейс реализовал же.
Листинг программы
  1. namespace Geometry
  2. {
  3. abstract class Figure : IComparable<Figure>
  4. {
  5. public virtual float GetS()
  6. {
  7. return 0;
  8. }
  9. public int CompareTo(Figure other)
  10. {
  11. if (other == null)
  12. return 1;
  13. return GetS().CompareTo(other.GetS());
  14. }
  15. };
  16. class Rectangle : Figure
  17. {
  18. public Rectangle(float w = 0, float h = 0)
  19. {
  20. _w = w;
  21. _h = h;
  22. }
  23. public override float GetS()
  24. {
  25. return _w * _h;
  26. }
  27. public float W
  28. {
  29. get { return _w; }
  30. set { _w = value; }
  31. }
  32. public float H
  33. {
  34. get { return _h; }
  35. set { _h = value; }
  36. }
  37. private float _w, _h;
  38. };
  39. class Square : Rectangle
  40. {
  41. public Square(float a = 0)
  42. : base(a, a)
  43. {
  44. }
  45. };
  46. class Circle : Figure
  47. {
  48. public Circle(float r = 0)
  49. {
  50. _r = r;
  51. }
  52. public override float GetS()
  53. {
  54. return (float)(Math.PI * _r * _r);
  55. }
  56. public float R
  57. {
  58. get { return _r; }
  59. set { _r = value; }
  60. }
  61. private float _r;
  62. };
  63. }
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. Geometry.Figure rect = new Geometry.Rectangle(20, 30),
  4. sqr = new Geometry.Square(5),
  5. cir = new Geometry.Circle(10);
  6. ArrayList arr = new ArrayList();
  7. arr.Add(rect);
  8. arr.Add(sqr);
  9. arr.Add(cir);
  10. arr.Sort(); // тут ошибка
  11. Console.ReadLine();
  12. }

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

textual
Листинг программы
  1. abstract class Figure : IComparable<Figure>, IComparable
  2.     {
  3.         public virtual float GetS()
  4.         {
  5.             return 0;
  6.         }
  7.         public int CompareTo(Figure other)
  8.         {
  9.             if (other == null)
  10.                 return 1;
  11.  
  12.             return GetS().CompareTo(other.GetS());
  13.         }
  14.         public int CompareTo(object other)
  15.         {
  16.             return CompareTo(other as Figure);
  17.         }
  18.     };

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


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

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы