Сравнение DateTimes: DateTime.Compare () и реляционных операторов - PullRequest
18 голосов
/ 11 апреля 2011

Вот два способа сравнения двух 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()?

Ответы [ 2 ]

15 голосов
/ 11 апреля 2011

Обычно методы .Compare для типов используются для сортировки, а не для прямого сравнения.

Интерфейс IComparable<T>, если поддерживается для типа, позволяет многим классам инфраструктуры правильно сортировать коллекции (например, List<T>.Sort).При этом, если вы хотите иметь возможность выполнять сравнение внутри универсального класса или метода, ограничение ваших универсальных аргументов типами, которые реализуют IComparable или IComparable<T>, позволит вам использовать .Compare() для сравнения, когда конкретный типнеизвестно.

5 голосов
/ 11 апреля 2011

Когда вы передаете объект как IComparable, «реляционные» операторы недоступны. В этом случае это может быть удобно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...