1

非常に大きなディクショナリを作成して初期化したところ、アプリケーションの起動時に次のエラーが発生しました。

An unhandled exception of type 'System.Windows.Markup.XamlParseException' occurred in      PresentationFramework.dll

Additional information: Zeilennummer "3" und Zeilenposition "9" von "Durch den Aufruf des     
Konstruktors für Typ "AbiZeitung.MainWindow", der den angegebenen Bindungseinschränkungen 
entspricht,    wurde eine Ausnahme ausgelöst.".

If there is a handler for this exception, the program may be safely continued.

ここに辞書の一部があります:

Dictionary<string, string> teacherList = new Dictionary<string, string>()
    {
        {"Mr", "M"},
        {"Mr", "D"},
        {"Mr", "S"},
        {"Mr", "W"}
    };

なぜこれが起こるのか推測できますか?

4

2 に答える 2

3

Aには一意のキーDictionary<T,U>が必要です。現時点では、「Mr」はすでにキーであるため、コレクション初期化子がを追加しようとすると例外 ( ) が発生します。ArgumentException{"Mr","D"}

詳細については、例外の下のDictionary.Addを参照してください。

ArgumentException: 同じキーを持つ要素が Dictionary に既に存在します。

View がこのディクショナリを間接的に (つまり、xaml から生成された ViewModel 内に) 作成すると、例外が発生し、それによって がXamlParseException発生します。

このようなコレクションが必要な場合は、2 つの文字列を含むカスタム タイプを作成することをお勧めしますObservableCollection<T>(または、これが変わらない場合)。List<T>

于 2013-01-21T17:00:14.570 に答える
1

例外が何を言っているのかわかりませんが、同じキーを複数回使用することはできませんDictionary<TKey, TValue>

キーと値のコレクションを表します。

あなたのコード"Mr"にはあなたの鍵があります。すべてのペアには一意のキーが必要です。

オブジェクトがディクショナリでキーとして使用されている限り、そのハッシュ値に影響を与えるような変更を行ってはなりません。ディクショナリのすべてのキーは、ディクショナリの等値比較子に従って一意である必要があります。値の型 TValue が参照型の場合、キーを null にすることはできませんが、値を null にすることができます。

于 2013-01-21T17:00:12.277 に答える