■36830 / ) |
Re[1]: Dictionary.containskeyを使ったキーの存 |
□投稿者/ よねKEN (345回)-(2009/06/06(Sat) 15:48:30)
|
> 上記のようにハッシュテーブルにキーと値を入れ込み、 > ContainsKeyにてキーの存在チェックをしているのですが、何故かFalse判定になってしまいます。 > 理由がさっぱり分かりません。どうかよろしくお願い致します。
(1)クラス商品keyでGetHashCodeメソッドをオーバーライドしていない。 (2)商品マスタの商品keyプロパティは毎回異なる(商品keyクラスの)インスタンスを返している。
の2点が原因ですね。
提示のコード中の > dic(商品.商品key) = 商品
ここの商品.商品keyと > If dic.ContainsKey(商品.商品key) Then
ここの商品.商品keyとは(フィールドのJANコードの文字列が同じである)異なるインスタンスを使用しています。 つまり、別のキー を使っているのでDictionaryに見つからないという結果になります。
Dictionaryなどのハッシュテーブルでは、キーに利用するクラスのGetHashCodeメソッドの値をキーとして使います。 (1)によりクラス商品keyのGetHashCodeメソッドは、ObjectのGetHashCodeメソッド実装を使われます。 ObjectのGetHashCodeメソッドがどんな値を返すかは保証されていません。 (ただし現状提供されているObjectクラスの実装では、同じインスタンスなら、同じ値を返し、 異なるインスタンスでは異なる値を返すようにはなっています)
(2)の理由により、商品.商品keyが毎回異なるインスタンスを返すので、提示のコードではContainsKeyはFalseにしかなりません。
|
|