gpt4 book ai didi

vb.net - 在 VB 中实现泛型 IComparer

转载 作者:行者123 更新时间:2023-12-04 05:42:40 27 4
gpt4 key购买 nike

我正在尝试创建一个实现我自己的类“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

问题是:在函数内部,我无法访问类(class)的任何字段。如果我从 x 开始。 Intellisense 只会给我 .Equals、.GetHashCode - 你在类型上而不是在实例上获得的方法。
Visual Studio 10 也强调了这一点,在函数的定义中,位“x as Stellung”和“y as Stellung”用浅蓝色书写,表示它是一种类型,而不是实际对象。

所以……我该怎么办??我如何访问我想在类里面比较的东西?
谢谢!

最佳答案

这些字段可能是私有(private)的,这就是您无法访问它们的原因。
让你的类实现 IComparable<T>界面。您可以在比较器类中使用它。
这是一个通用比较器类的示例,它比较实现 IComparable<T> 的对象.

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

关于vb.net - 在 VB 中实现泛型 IComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11070133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com