クラスがあるとしましょう
Public Class Person
Public Name As String
Public Rank As String
End Class
そして、これらのクラスをキーとして使用する辞書があります。2つのPersonオブジェクトがあり、それぞれNameとRankの文字列値が同じですが、同じキーとして扱われていないことがわかりました。辞書をこのように使用することはできませんか?
クラスがあるとしましょう
Public Class Person
Public Name As String
Public Rank As String
End Class
そして、これらのクラスをキーとして使用する辞書があります。2つのPersonオブジェクトがあり、それぞれNameとRankの文字列値が同じですが、同じキーとして扱われていないことがわかりました。辞書をこのように使用することはできませんか?
辞書は、デフォルトでユーザーが作成したクラスを比較する方法を知りません。クラス内のすべてのフィールドを単純に比較するわけではありません。Dictionary <TKey、TValue>の備考セクションに記載されているように:
タイプTKeyがSystem.IEquatableジェネリックインターフェイスを実装している場合、デフォルトの等式比較プログラムはその実装を使用します。
個人クラスIEquatable<T>
は、メソッドで構成されるインターフェースを実装する必要があります。このインターフェースはEquals(Person)
、2つのインスタンスを同等として扱う必要がある場合にtrueを返します。さらに、IEquatable <T>の注釈に記載されているように:
IEquatableを実装する場合は、およびの基本クラスの実装もオーバーライドし
Object.Equals(Object)
てGetHashCode
、それらの動作がメソッドの動作と一致するようにする必要がありますIEquatable<T>.Equals
。