|
Hongliangさん、よねKENさん、返答ありがとうございました。
インスタンスが違う事には気づきませんでした。
今回HashCodeというものに初めて気づかされたのですが、
「GetHashCodeで返される値が同じであれば、同一のインスタンスである。」と判断するという事なんでしょうか。
Stringクラスで同じ文字列であれば、同じ値を返すようなので、同一のインスタンスとも違うのでしょうね。
> Dictionary のコンストラクタで IEqualityComparer(Of 商品key) を渡すか、商品key クラスに IEquatable(Of 商品key) を実装させるか、をすれば自由に同一性の判定をすることができます。
Dim dic As New Dictionary(Of 商品key, 商品マスタ)(New 商品KeyComparer) ← 追加しました
Public Class 商品KeyComparer
Implements IEqualityComparer(Of 商品key)
Public Function Equals1(ByVal x As 商品key, ByVal y As 商品key) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of 商品key).Equals
If x.JANコード = y.JANコード Then
Return True
End If
End Function
Public Function GetHashCode1(ByVal obj As 商品key) As Integer Implements System.Collections.Generic.IEqualityComparer(Of 商品key).GetHashCode
'ここにはいったい何が・・・
End Function
End Class
上記のような、Dictionary のコンストラクタで IEqualityComparer(Of 商品key) を渡す方法で、得たい結果が出ました。
商品key クラスに IEquatable(Of 商品key) を実装させるほうが自分的にすっきりするので、こちらは今から勉強します。
一番最初に指摘して頂いたGetHashCodeを実装する方法はやはりさっぱりです^^;
> それはそうとして、商品keyを用意しなくても以下のようにStringをキーにすればよいかと思います。
よくばって複数キーで索引する仕組みを作ろうと思っていました。
自分のやりたい事だと複数キーでも文字連結で出来そうな気がします。
ありがとうございました。
|