Vb.net 在VB中实现通用IComparer

Vb.net 在VB中实现通用IComparer,vb.net,generics,icomparer,Vb.net,Generics,Icomparer,我正在尝试创建一个类,实现我自己的类“Stellungen”的通用IComparer(它可以转换为位置,比如在国际象棋或跳棋板上) 这就是我得到的: Private Class comparer(Of Stellung) Implements System.Collections.Generic.IComparer(Of Stellung) Public Function Compare(x As Stellung, y As Stellung) As Integer Impl

我正在尝试创建一个类,实现我自己的类“Stellungen”的通用IComparer(它可以转换为位置,比如在国际象棋或跳棋板上)

这就是我得到的:

Private Class comparer(Of Stellung)
    Implements System.Collections.Generic.IComparer(Of Stellung)

    Public Function Compare(x As Stellung, y As Stellung) As Integer Implements System.Collections.Generic.IComparer(Of Stellung).Compare

    End Function

End Class
问题是:在函数中,我无法访问类的任何字段。如果我从x开始。Intellisense将只提供.Equals、.GetHashCode—您在类型上获得的方法,但在实例上没有。 Visual Studio 10也强调了这一点,在函数的定义中,“x为Stellung”和“y为Stellung”位用浅蓝色书写,这意味着它是一种类型,而不是实际对象

所以。。。我该怎么办??我如何访问我想在课堂上比较的内容??
谢谢

这些字段可能是私有的,因此您无法访问它们。 使您的类实现
IComparable
接口。您可以在比较器类中使用它。
下面是一个通用比较器类的示例,它比较实现
IComparable
的对象


如果声明
私有类比较器(Stellung)
,则“Stellung”只是要使用的类型的占位符(如教程中的“T”)


声明
私有类比较器
,并
实现System.Collections.Generic.IComparer(Stellung)
告诉编译器您要比较类型为“Stellung”的对象,这会使Stellung的属性在编辑器中可见。

感谢您的快速回答!我的类没有私有字段,所有内容都是公共的,并且都位于一个文件、一个命名空间和一个程序集中。从这边进入应该没有问题。添加IComparable是关键!
Public Class GenericComparer(Of T As IComparable(Of T))
    Inherits Comparer(Of T)

    Public Overrides Function [Compare](ByVal x As T, ByVal y As T) As Integer
        If (Not x Is Nothing) Then
            If (Not y Is Nothing) Then
                Return x.CompareTo(y)
            End If
            Return 1
        End If
        If (Not y Is Nothing) Then
            Return -1
        End If
        Return 0
    End Function

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Dim comparer As GenericComparer(Of T) = TryCast(obj,GenericComparer(Of T))
        Return (Not comparer Is Nothing)
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return MyBase.GetType.Name.GetHashCode
    End Function

End Class


public class Stellung
   Implements IComparable(Of Stellung)

   Public Function CompareTo(ByVal value As Stellung) As Integer
       'Here you should be able to access all fields. 
   End Function
End class