2

自分のクラス「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もこれを強調しています。関数の定義では、ビット「xasStellung」と「yasStellung」は水色で書かれています。つまり、これはタイプであり、実際のオブジェクトではありません。

だから...私は何をしますか?クラス内で比較したいものにアクセスするにはどうすればよいですか?ありがとう!

4

2 に答える 2

2

フィールドはおそらくプライベートであり、それがあなたがそれらにアクセスできない理由です。クラスに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
于 2012-06-17T09:08:22.980 に答える
1

宣言するPrivate Class comparer(Of Stellung)と、「Stellung」は使用するタイプの単なるプレースホルダーになります(チュートリアルの「T」など)。

を宣言Private Class comparerし、Implements System.Collections.Generic.IComparer(Of Stellung)「Stellung」タイプのオブジェクトを比較することをコンパイラーに通知します。これにより、Stellungのプロパティがエディターに表示されます。

于 2018-09-20T10:30:56.107 に答える