.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);
}
};