.NETでJavaコードを移植していますが、.NETで予期せず動作する次の行にはまっています。JavaのMap、Set、HashMapを持つ.NETポート
のJava:
Map<Set<State>, Set<State>> sets = new HashMap<Set<State>, Set<State>>();
Set<State> p = new HashSet<State>();
if (!sets.containsKey(p)) { ... }
同等.NETコードはおそらく次のようになります。
IDictionary<HashSet<State>, HashSet<State>> sets = new Dictionary<HashSet<State>, HashSet<State>>();
HashSet<State> p = new HashSet<State>();
if (!sets.containsKey(p)) { /* (Add to a list). Always get here in .NET (??) */ }
コード比較が失敗したが、プログラムは「 "セット" はキーが含まれていないことを考えますp "になり、最終的にOutOfMemoryExceptionが発生します。
多分私は何かが不足している、オブジェクトの平等とアイデンティティはJavaと.NETの間で異なるかもしれません。
私はクラスStateでIComparableとIEquatableを実装しようとしましたが、結果は同じでした。
編集:
何のコードがないことである:セットは(HashSetのある)キー「P」が含まれていない場合、LinkedListのの末尾に「P」を追加する予定です> 。 Javaでは
Stateクラスのコードを教えてください。また、コードが正確に何をしたいのかを(できれば技術的な用語ではなくビジネスの中で)説明することができればすばらしいことでしょう。 – mjwills