0

使用 2 个相同类型的对象,我正在尝试实现<and >,但我似乎找不到任何关于如何处理其中一个或两者的权威资料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

访问器是我集中属性枚举的规范方法(都是十​​进制的)

如果两者都返回 false Nothing

我找到了一条评论,但似乎无法验证或验证它

空对象总是小于非空对象

我该如何处理Nothing

4

2 回答 2

1

考虑到这是一个例外情况,您可以抛出异常。

您还可以遵循框架所做的操作并返回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
于 2011-02-01T16:09:59.790 回答
0

这就是我一直在寻找的:

根据定义,任何对象比较大于(或跟随)null,并且两个 null 引用比较彼此相等。

来自IComparable.CompareTo上的 Msdn 文档

作为一般规则,我不认为遵循 compareTo 有任何推理或缺点。然后,对于特定用途或上下文检查是否抛出异常更有意义。

于 2011-02-01T21:35:44.433 回答