Убедитесь, что вы используете Object.ReferenceEquals, чтобы проверить, является ли аргумент, переданный CompareTo, нулевым.Избегайте использования операторов == и! = В методах CompareTo, потому что кто-то может фактически следовать предложению MSDN о делегировании этих операторов обратно в метод CompareTo, который, в свою очередь, создал бы бесконечный цикл и переполнение стека (!) В мгновение ока.
Вот модель, как вы можете попытаться реализовать метод CompareTo:
public class Piano : IComparable<Piano>
{
public float Mark { get; set; }
public int CompareTo(Piano other)
{
// The very basic implementation of CompareTo
if (object.ReferenceEquals(other, null))
return 1; // All instances are greater than null
return Mark.CompareTo(other.Mark);
}
}
Весь исходный код с пояснениями по этому адресу.