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

标签 vb.net generics .net-2.0 operator-overloading

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

  • 没有为类型“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

最佳答案

Why wouldn't VB automatically call the appropriate T operator? (i.e. If T is an integer then call the integer comparison functions.)

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

关于VB.NET (Of T) 比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482036/

相关文章:

c# - 查找文件文件夹的最新最后修改时间的最佳方法是什么?

表达式主体中的 Kotlin null 和 kotlin.Unit 混淆

c# - 使用 C# 以编程方式更新 xml

vb.net - 计算字符串或字节数组的 CRC32

c# - 将此 DLL 包含从 VB.net 翻译成 C#

java - 类 StatusCode 扩展 Enum<StatusCode>

.net - 如何使用c++查找系统中是否安装了.NET?

c# - 我们可以在c#中的datatable.select中添加参数吗

vb.net - 如何将 "%"作为参数的一部分传递给 SqlCommand?

java - java支持泛型方法支持各种参数输入吗?