次のような辞書があります。
var dic = Dictionary<Collection<MyObject>, string>
次に、次のようなエントリを追加します。
dic.Add(myObjColl, "1");
myObjColl には単一のエントリが含まれます
2 回目の実行で、myObjColl に 2 つのエントリ (そのうちの 1 つは最初の実行と同じ) がある dic に別のエントリを追加しようとすると、キーが既に存在するという例外が発生します。
ここで何が欠けていますか?ディクショナリ キーはコレクションであると予想されますが、エントリ数が異なる 2 つのコレクションは同一ではありません。
編集:何が起こったのかというと、myObjColl が foreach の外で初期化され、2 回目の反復中に更新されました。だから、2つのエントリを持つ新しいコレクションだと思っていたのは、実際には古い1つのエントリのコレクションに追加のエントリが追加されたものでした.
私の問題について少し詳しく説明するには:
製品行オブジェクトのコレクションがあります。それぞれに、キーと値のペアのコレクションで構成される製品識別オブジェクトがあります。
Collection<ProductKeyValuePair> productIdentification;
myProductRow.ProductIdentification = productIdentification;
次に、各製品行オブジェクトの「所有者」を定義する ProductKeyValuePairs の別のコレクションを作成する必要があり (1 つの製品行オブジェクトは複数の所有者を持つことができます)、各所有者を対応する製品行オブジェクトに追加する必要があります。共通キーが KeyValuePairs のコレクションである従来の多対多。
説明するのは難しいですが、メインフレームで実行されている古いシステムから返され、おそらく何らかの階層型データベースに保存されているレガシー データにかかっています :-/