Что операторы <,> должны делать с одним или обоими объектами, для которых установлено значение «Ничего»? - PullRequest
0 голосов
/ 01 февраля 2011

Используя 2 объекта одного типа, я пытаюсь реализовать < и >, но я не могу найти какого-либо авторитетного источника о том, что делать с тем или иным из них Nothing. Другими словами, какова принятая практика или предложения MSDN.

Пример кода:

Private Shared _accessors As IEnumerable(Of Func(Of CmykColor, Decimal))
Public Shared Operator >(ByVal color1 As CmykColor, ByVal color2 As CmykColor) As Boolean
            //' A null object is always less than a non-null object
            If color1 Is Nothing OrElse color2 Is Nothing Then Return False
            Dim foundGreater As Boolean
            For Each prop In _accessors
                If prop(color1) < prop(color2) Then Return False
                If foundGreater = False AndAlso prop(color1) > prop(color2) Then foundGreater = True
            Next
            Return foundGreater
        End Operator

Accessors - мой канонический метод для централизации перечисления свойств (все являются десятичными)

вернуть false для обоих, если либо Nothing?

Я нашел комментарий, но не могу его подтвердить или подтвердить, что

Нулевой объект всегда меньше ненулевого объекта

Как мне справиться Nothing?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Учитывая это исключительный случай, вы можете выдать исключение.

Вы также можете следить за тем, что делает фреймворк и возвращать False.

Пример:

Dim result As Boolean = (New DateTime() > New DateTime()) ' result is False

Редактировать

И чтобы быть последовательным, сам язык возвращает False со следующим кодом:

Dim result As Boolean = (Nothing > Nothing) ' result is False

Кроме того, теоретически, если обаNothing, оба равны.И никто не больше или меньше другого.

Например,

1 > 1  ' False
1 < 1  ' False
1 == 1 ' True
0 голосов
/ 02 февраля 2011

Это то, что я искал:

По определению любой объект сравнивается больше чем (или следует) нуль, и две нулевые ссылки сравниваются равными друг друга.

Из документации MSDN на IComparable.CompareTo

Я не вижу каких-либо причин или недостатков для последующего сравнения по этому вопросу как общего правила. Затем для конкретного использования или проверки контекста имеет ли смысл выбрасывать исключение.

...