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

ADictionary<T,U>需要有唯一的键。现在,您的集合初始化程序ArgumentException在尝试添加时会引发异常 () {"Mr","D"},因为“Mr”已经是一个键。

有关详细信息,请参阅Dictionary.Add,在例外情况下:

ArgumentException:字典中已存在具有相同键的元素。

如果您的视图创建了这个字典,即使是间接的(即:它在从 xaml 生成的 ViewModel 中),您会得到一个异常,这反过来会导致XamlParseException发生。

如果您需要这样的集合,我建议制作一个ObservableCollection<T>(或者List<T>如果这不会改变)包含两个字符串的自定义类型。

于 2013-01-21T17:00:14.570 回答
1

我不知道异常说明了什么,但您不能多次使用同一个密钥Dictionary<TKey, TValue>

表示键和值的集合。

在您的代码"Mr"中是您的关键。所有对都必须有唯一的密钥

只要一个对象被用作字典中的键,它就不能以任何影响其哈希值的方式发生变化。根据字典的相等比较器,字典中的每个键都必须是唯一的。如果值类型 TValue 是引用类型,则键不能为空,但值可以为空。

于 2013-01-21T17:00:12.277 回答