Как исправить правило «Перегрузки операторов имеют именованные альтернативы» в С#

Поскольку перегрузка оператора (operator> и operator‹) нарушает правило Перегруженные операторы имеют именованные альтернативы, операторы > и ‹ требуют альтернативного метода Compare, однако, поскольку может быть только один метод Compare, какой должна быть сигнатура этого метода?

например, у меня есть:

public static bool operator >(XXX lhs, XXX rhs)

а также

public static bool operator <(XXX lhs, XXX rhs)

Как обеспечить метод сравнения, чтобы он вел себя так же, как операторы больше и меньше?

Редактировать:

int Compare() возвращает только положительный (больше), отрицательный (меньше) и 0 (равный), а в моем перегруженном операторе есть оператор >=, что означает, что мой метод сравнения должен обрабатывать (больше или равно) sinario как хорошо

А как насчет четырех перегруженных операторов >, ‹ >= и ‹=?


person Fan Jia    schedule 15.11.2012    source источник
comment
Взгляните на интерфейс IComparable, msdn.microsoft.com/en- us/library/system.icomparable.aspx, есть также общая версия, msdn.microsoft.com/en-us/library/4d7sx9hd.aspx. public int CompareTo (XXX другое) { .... }   -  person Xharze    schedule 15.11.2012


Ответы (2)


public static int Compare(XXX lhs, XXX rhs);

Возвращаемое значение:

  • Меньше нуля
    слева меньше, чем справа.
  • Ноль
    лев. ось равен правой стороне.
  • Больше нуля
    левая позиция больше, чем правая сторона.

Примеры:

Использование:

// operator            // named alternative
   x < y                  Compare(x, y) < 0
   x <= y                 Compare(x, y) <= 0
   x > y                  Compare(x, y) > 0
   x >= y                 Compare(x, y) >= 0

Реализация IComparable‹T› также является хорошей идеей.

person dtb    schedule 15.11.2012
comment
Спасибо за комментарий, а как насчет ›= и ‹= в перегруженном операторе? - person Fan Jia; 15.11.2012
comment
Извините, я не понимаю вашего вопроса. Можно, пожалуйста, другими словами? - person dtb; 15.11.2012
comment
Конечно, я имею в виду, что int Compare() возвращает только положительное (больше), отрицательное (меньше) и 0 (равно), а в моем перегруженном операторе есть оператор ›=, что означает, что мой метод Compare должен обрабатывать (больше до или равно) sinario, а также. - person Fan Jia; 15.11.2012
comment
Я добавил примеры использования метода Compare. - person dtb; 15.11.2012

У вас есть один метод Compare, и возвращаемое значение определяет, равны ли 2 операнда (0), или x меньше y, или x больше y.

Взгляните, например, на метод String.Compare .

person Frederik Gheysels    schedule 15.11.2012
comment
String.Compare, вероятно, не является хорошим примером, потому что String не имеет операторов ‹ ›. Но сигнатура метода та же. - person dtb; 15.11.2012