Подтвердить что ты не робот

Сравнение DateTimes: DateTime.Compare() и реляционных операторов

Вот два способа сравнения двух DateTimes:

DateTime now = DateTime.Now;
DateTime then = new DateTime(2008, 8, 1);

// Method 1
if (DateTime.Compare(then, now) < 0)
    // ...

// Method 2
if (then < now)
    // ...

.Compare возвращает целое число (-1,0,1), указывающее, является ли первый экземпляр более ранним, чем тот же или позже второго экземпляра.

Мой вопрос: зачем использовать .Compare, когда я могу напрямую использовать реляционные операторы (<, <=, ==, >=, >)? Мне кажется, используя .Compare, мне нужно использовать реляционные операторы в любом случае (по крайней мере, в приведенном выше примере, иначе я мог бы создать оператор switch, проверяющий случаи -1, 0 и 1).

В каких ситуациях предпочтение или необходимость использования DateTime.Compare()?

4b9b3361

Ответ 1

Как правило, методы .Compare для типов используются для сортировки, а не для прямых сравнений.

IComparable<T> интерфейс, поддерживаемый типом, позволяет многим классам фреймворков правильно сортировать коллекции (например, List<T>.Sort, для пример).

Если вы хотите иметь возможность выполнить сравнение в универсальном классе или методе, ограничение ваших общих аргументов типами, которые реализуют IComparable или IComparable<T>, позволит вам использовать .Compare() для сравнения, когда конкретный тип неизвестен.

Ответ 2

Когда вы передаете объект как IComparable, операторы "relational" недоступны. В этом случае это может быть удобно.