Сравнение 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()
?
Ответы
Ответ 1
Как правило, методы .Compare
для типов используются для сортировки, а не для прямых сравнений.
IComparable<T>
интерфейс, поддерживаемый типом, позволяет многим классам фреймворков правильно сортировать коллекции (например, List<T>.Sort
, для пример).
Если вы хотите иметь возможность выполнить сравнение в универсальном классе или методе, ограничение ваших общих аргументов типами, которые реализуют IComparable
или IComparable<T>
, позволит вам использовать .Compare()
для сравнения, когда конкретный тип неизвестен.
Ответ 2
Когда вы передаете объект как IComparable
, операторы "relational" недоступны. В этом случае это может быть удобно.