VB.NET (Of T) Оператор сравнения - PullRequest
3 голосов
/ 27 января 2009

В примере кода строка с комментарием об ошибке выдает следующую ошибку:

  • Оператор '<' не определен для типов 'T' и 'T'. </li>

Почему бы 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 Ответ

8 голосов
/ 27 января 2009

Почему бы VB автоматически не вызывать соответствующий T-оператор? (т. е. если T является целым числом, то вызвать функции сравнения целых чисел.)

Потому что нет ограничения на T, которое гарантировало бы наличие соответствующего оператора. Вам может потребоваться, чтобы T был IComparable , и использовать его метод CompareTo.

...