字典<string,string =“”> - &gt; PresentationFramework.dll中出现未处理的“System.Windows.Markup.XamlParseException”类型异常</string,>

时间:2013-01-21 16:57:19

标签: c# dictionary

我创建并初始化了一个很大的词典并在启动应用程序时遇到了这个错误:

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"}
    };

有人猜到为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

Dictionary<T,U>需要唯一键。现在,您的集合初始值设定项会在尝试添加ArgumentException时引发异常({"Mr","D"}),因为“Mr”已经是关键。

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

  

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

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

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

答案 1 :(得分:1)

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

  

表示键和值的集合。

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

  

只要将对象用作词典中的键,   它不得以任何影响其哈希值的方式进行更改。每一把钥匙   在词典中必须是唯一的   字典的平等比较。密钥不能为空,但值可以为   如果值类型TValue是引用类型。