.net-FrameworkのDictionaryはkey一致の比較にEqualsを使う。
そのためkeyオブジェクトの比較を書き換えたい場合はEqualsをオーバーライドすればいい。
Public Overrides Function Equals(ByVal o As Object) As Boolean '''''''''''''' ' 特殊な比較処理 '''''''''''''' Return True End Function
ところがもう一つ施さなければならないことがある。
Hash値が異なればEqualsが呼ばれないからだ。
要はインスタンスが異なってもEqualsが呼ばれるようにGetHashCodeで任意の固定値を返却する。
Public Overrides Function GetHashCode() As Integer Return 1 End Function
ただ経験上Equalsのオーバーライドは混乱の元となるように思う。
シンプルで直観的な処理が一番安定するわけだから、この手法はあまり多用しないほうがいいかもしれない。