Ответ 1
Да, есть лучшая практика. Вопреки тому, что говорят другие ответы, существует ожидаемый стандарт, а не просто самое популярное поведение.
Правильный ответ приведен в документации MSDN для IComparable<T>.CompareTo
и IComparable.CompareTo
:
По определению любой объект сравнивается больше null и два nullссылки сравниваются друг с другом.
(Контракт, сравнение большего определяется как: if a > b
then a.CompareTo(b) > 0
.)
Это ожидаемое поведение также подтверждается, например, в Nullable.Compare<T>
. Null всегда сравнивается как меньшее значение.
Также стоит отметить, что для не-общего сравнения несовпадающие типы не должны рассматриваться как null:
Параметр, obj, должен быть того же типа, что и класс или тип значения который реализует этот интерфейс; в противном случае исключение ArgumentException выброшены.
Это не влияет на ваш вопрос, но имейте в виду, Nullable<T> comparison operators
(==
, !=
, <
, <=
, >
, >=
) не следует < <2 → .
Когда вы выполняете сравнения с типами NULL, если значение одного нулевых типов - null, а другой - нет, все сравнения оцените
false
, за исключением!=
(не равно). Важно не предположим, что, поскольку конкретное сравнение возвращаетfalse
, обратный случай возвращаетtrue
. В следующем примере 10 не больше, меньше или равно нулю. Толькоnum1 != num2
оценивается доtrue
.
Существует также нечетный результат, который (int?)null == (int?)null
имеет значение true, но (int?)null <= (int?)null
не имеет значения.