Да, есть лучшая практика. Вопреки тому, что говорят другие ответы, существует ожидаемый стандарт, а не просто самое популярное поведение.
Правильный ответ дается в документации MSDN для IComparable<T>.CompareTo
и IComparable.CompareTo
:
По определению, любой объект сравнивает больше нуль и два нуль ссылки сравнения равны друг другу.
(По контракту, сравнивая больше определяется как:., Если a > b
затем a.CompareTo(b) > 0
)
Это ожидаемое поведение также подтверждается, например, в Nullable.Compare<T>
. Нуль всегда сравнивается как меньшее значение.
Стоит также отметить, что для необщего сравнения, не соответствующие типы не должны рассматриваться как нуль:
Параметр, OBJ, должен быть того же типа, класса или значение типа который реализует этот интерфейс; в противном случае ArgumentException - .
Это не влияет на ваш вопрос, но имейте в виду, Nullable<T> comparison operators
(==
, !=
, <
, <=
, >
, >=
) не следуют IComparable
конвенции.
При выполнении сравнения с обнуляемыми типами, если значение одного из обнуляемых типов равен нуль, а другие нет, все сравнения оценки в false
для !=
(не равно), за исключением. Важно, чтобы предполагал, что, поскольку конкретное сравнение возвращает false
, напротив случая возвращает true
. В следующем примере 10 не является больше, чем или равно нулю. Только num1 != num2
- true
.
Существует также нечетный результат, который (int?)null == (int?)null
оценивается как истина, но (int?)null <= (int?)null
не делает.
Что значит «невозможно»? Все ссылочные типы можно сравнить с нулевым значением. В противном случае вы можете обернуть вещи с помощью [Nullable class] (http://msdn.microsoft.com/en-us/library/system.nullable.aspx). – Renan
Если вы «ожидаете разные мнения», то это не подходит для переполнения стека, так как в FAQ часто указывается, что вам следует «избегать вопросов субъективных вопросов». –
приведен пример. Поскольку CompareTo возвращает порядок сортировки объектов, не обязательно классифицировать нуль в качестве первого элемента – NoviceProgrammer