2012-02-21 9 views
2

多くのデータを挿入するDictionary<TKey,TValue>があります。キーは列挙型です。この例外が発生し続ける:「同じキーを持つ項目」例外。辞書の列挙型キー

同じキーの項目が既に追加されています。

しかし、私は私の列挙型のいくつかが同じ値を持っている疑いがあるが、私はは、どんなdupesが表示されません。重複したキーエラーの原因になりますか?列挙型は特別な型だと思ったので、値は重要ではありません。

例外はそれほど有用ではありません...それはどのキーが偽装をトリッピングしているか教えてくれません。私はイニシャライザーリストを使用しています。


編集:は別々の.Add呼び出しに私の初期化リストを変換するために、いくつかの正規表現の魔法を使用します。キーを見つけましたが、私はまだ偽装を見ていません...

+0

明白な質問をするだけです:あなたはそれをVisual Studioでデバッグできますか?そうでない場合は、辞書追加操作の前に追加のチェックを作成して、キーがすでに存在するかどうかを確認し、追加すると便利な例外がスローされます。 – lzcd

+0

@lzcd:まあ、私はイニシャライザのリストではできませんでした。私はそれを壊した後、それは私にライン#を与えた。 – mpen

+0

列挙にはいくつの値がありますか?数値が明示的に指定されているか、デフォルトで残っていますか?それは[Flags] enumですか? Pavelが下で述べたように、enumはちょうどint(デフォルト)または別の非数値データ型の背後にあるので、異なる値(またはFlags enumの組み合わせ)が同じ数に解決されることがあります。 –

答えて

5

enumの複数のメンバーが例外の原因となる数値表現が同じ場合。

+0

Bahh..alright。私は約256個の列挙型キーのリストを作成していますが、まだすべての列挙型キーは割り当てられていないので、それらを自動的に割り当てます。私は明示的に割り当てられたものに自動割り当てされているに違いないと思います。 – mpen

+0

'Enum.GetValues(typeof(yourEnum)) 'という結果をコンソールに出力し、重複があるかどうかを確認しようとしました –

+0

ええ、一度に1つずつ進むだけです。ありがとう! (あなたの答えを受け入れるのに10分を待たなければならなかった) – mpen

1

デフォルトでは、Enumsの数値表現は増加します。重複する値を指定しない限り、何も指定しないでください。

Tをあなたの列挙型に置き換えて以下を実行し、いずれかの値が矛盾していないかどうかを確認してください。

もしそうでなければ、私が見ている唯一の選択肢は、列挙型をキーとして2回使用していることです。

関連する問題