在泛型中实现 IComparable<T>:如何访问泛型的值?

Implementing IComparable<T> in Generics: how can I access the Generic's Value?

我有一个通用的class如下(ValuePublic只是为了简单起见,实际上,它都封装在属性中):

Public MustInherit Class GenericInterval(Of T As {Structure, IComparable})
    Public Value As T                     
End Class

我要实施IComparable(Of T):

Public MustInherit Class GenericInterval(Of T As {Structure, IComparable})
    Implements IComparable(Of T)

    Public Value As T                     

    Public Function CompareTo(Other As T) As Int32 Implements IComparable(Of T).CompareTo
        Return Value.CompareTo(Other)
    End Function
End Class

但这真的正确吗?感觉有点 "unmatching",好像我会将一个值与泛型进行比较。

在一个测试模块中,我实例化了 2 个变量并为它们赋值。

Dim lTest1 As New GenericInterval()
Dim lTest2 As New GenericInterval()

lTest1.Value = 4
lTest2.Value = 5

现在我希望将 lTest1lTest2 进行比较。但是,我需要对提取的 Value:

进行测试
If lTest1.CompareTo(lTest2.Value) >= 0 Then
End If

但这样做,我也可以只使用

If lTest1.Value >= lTest2.Value Then ...

完全省略界面。

允许我访问已经在通用 CompareTo 中的 Value 不是很有利吗,例如:

Return Value.CompareTo(Other.Value)

但是,Value 不是泛型中的可访问成员。

我是不是漏掉了什么,还是设计使然无法访问?如果是,目的是什么?

您需要实施IComparable(Of GenericInterval(Of T))

Public Class GenericInterval(Of T As {Structure, IComparable})
    Implements IComparable(Of GenericInterval(Of T))

    Public Sub New(value As T)
        Me.Value = value
    End Sub

    Public Readonly Value As T

    Public Function CompareTo(other As GenericInterval(Of T)) As Integer Implements IComparable(Of GenericInterval(Of T)).CompareTo
        Return Value.CompareTo(other.Value)
    End Function
End Class

测试:

Sub Main
    Dim lTest1 As New GenericInterval(Of Integer)(4)
    Dim lTest2 As New GenericInterval(Of Integer)(5)

    Console.WriteLine(lTest2.CompareTo(lTest1))
End Sub

如果 TStructureValue 只是 属性,您可能还想将 GenericInterval 变成一个结构。 (它需要是不可变的)