0

<同じタイプの 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

アクセサーは、プロパティの列挙を一元化するための私の標準的な方法です (すべて 10 進数です)。

Nothingどちらかが?の場合、両方に対して false を返します。

コメントを見つけましたが、それを検証または検証できないようです

null オブジェクトは常に非 null オブジェクトより小さい

どのように処理し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 に続く) と比較され、2 つの null 参照は互いに等しいと比較されます。

IComparable.CompareToに関する MSDN ドキュメントから

一般的なルールとして、これについてcompareToに従うことの理由や欠点は見当たりません。次に、特定の使用法またはコンテキストについて、例外をスローする方が意味があるかどうかを確認します。

于 2011-02-01T21:35:44.433 に答える