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

use*_*612 3 vb.net generics operator-overloading .net-2.0

在示例代码中,带有"错误注释"的行给出以下错误 -

  • 对于类型"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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ett 8

为什么VB不会自动调用相应的T运算符?(即如果T是整数,则调用整数比较函数.)

因为对T没有约束可以确保它具有适当的运算符.您可以要求T为IComparable,并使用它的CompareTo方法.