2009-01-27 93 views
3

在示例代碼,用「錯誤註釋」行給出了以下的錯誤 -VB.NET(OF T)比較運算符

  • 運算符「<」不是類型「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 

回答

8

爲什麼不會自動VB調用相應的T接線員? (即如果T是一個整數,則稱爲整數比較函數)。

因爲T沒有約束來確保它具有適當的運算符。你可能需要T爲IComparable,並使用它的CompareTo方法。

+0

謝謝馬克。我一直在考慮C++和運算符重載。不知道哪種方式更清潔/更優雅。猜猜這是語言設計的問題。 – user50612 2009-01-27 02:47:02