VB.NET(Of T)比较运算符

3
在示例代码中,“错误注释”所在的行会产生以下错误 -
  • 运算符“<”未为类型“T”和“T”定义。
为什么VB不能自动调用适当的T运算符呢?(例如,如果T是整数,则调用整数比较函数。)
有没有可能以优雅的方式使其工作?
这适用于.NET 2.0。 编辑 - 更新了代码,供有兴趣的人使用。
Public Class TreeNode(Of T)
    Public Left As TreeNode(Of T)
    Public Right As TreeNode(Of T)
    Public Value As IComparable(Of T)
    Public Sub New(ByVal _value As T)
        Value = _value
    End Sub
End Class

Public Class Tree(Of T)

    Private _Root As TreeNode(Of T)

    Public ReadOnly Property Root()
        Get
            Return _Root
        End Get
    End Property

    Public Sub New()
        _Root = Nothing
    End Sub

    Public Function Add(ByVal value As IComparable(Of T)) As TreeNode(Of T)
        If _Root Is Nothing Then
            _Root = New TreeNode(Of T)(value)
        Else
            Dim node As TreeNode(Of T) = _Root
            While node IsNot Nothing
                If value.CompareTo(node.Value) < 0 Then
                    If node.Left IsNot Nothing Then
                        node = node.Left
                    Else
                        node.Left = New TreeNode(Of T)(value)
                        Return node.Left
                    End If
                Else
                    If node.Right IsNot Nothing Then
                        node = node.Right
                    Else
                        node.Right = New TreeNode(Of T)(value)
                        Return node.Right
                    End If
                End If
            End While
        End If
        Return _Root
    End Function

    Public Sub Print(ByVal node As TreeNode(Of T))
        If node IsNot Nothing Then
            Print(node.Left)
            Console.WriteLine(node.Value)
            Print(node.Right)
        End If
    End Sub

End Class
1个回答

9
由于T没有约束来确保它具有适当的运算符,因此为什么VB不会自动调用适当的T运算符?(即,如果T是整数,则调用整数比较函数。)您可以要求T为IComparable并使用其CompareTo方法。

谢谢Mark。我一直在想C++和运算符重载。不确定哪种方式更清晰/更优雅。我猜这是语言设计的问题。 - user50612
在VB中,您也可以重载运算符,但必须告诉编译器要将其与通用类型一起使用。 - Joel Coehoorn
@Joel - 我认为没有针对操作重载的通用约束。 - Mark Brackett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接