以某种方式将超过 2 个项目存储到字典时程序崩溃

Program crashing when storing more than 2 items into Dictionary in a certain way

很难很好地描述标题中的情况,但这是要点。

我有一个 ComboBox,其中充满了来自第一个字典的代码隐藏的复选框。
然后我从组合框中拉出文本,然后根据键(组合框文本块中的名称)找到值
它们以逗号分隔,所以我使用的是正则表达式分隔值。

第一个工作正常,然后添加第二个。但是当我尝试添加更多时它爆炸了。

Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();

    private void button1_Click(object sender, RoutedEventArgs e)
    {   
        string[] w = SplitWords(MC.Text);
        selectedCharacters.Clear();

        foreach (string s in w)
        {
            string fileName = "";
            Items.TryGetValue(s, out fileName);
            selectedCharacters.Add(s, fileName);
        }

        foreach (var item in selectedCharacters)
        {
            testBlock.Text += string.Format(item.Key + "   " +
            item.Value + "\n");
        }
    }

    static string[] SplitWords(string s)
    {
        return Regex.Split(s, @"(.*?),");
    }

testBlock 是我用来在屏幕上显示它的文本块。我在 names/keys 中还有其他字符,例如 ' 和一些空格等等,所以我搞定了一个寻找逗号分隔的正则表达式。

我觉得 2 很好,但 3 就不行了,这很奇怪。

通过评论部分后,我注意到问题出在重复键上。问题是由于 regex 答案后半部分所述的失败

来自MSDN

ArgumentException : An element with the same key already exists in the Dictionary.

一种解决方案是在将键添加到字典之前检查键是否存在。

Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();

private void button1_Click(object sender, RoutedEventArgs e)
{   
    string[] w = SplitWords(MC.Text);
    selectedCharacters.Clear();

    foreach (string s in w)
    {
        // Check whether KEY exists  
        if(!selectedCharacters.ContainsKey(s)){
            string fileName = "";
            Items.TryGetValue(s, out fileName);
            selectedCharacters.Add(s, fileName);
        }
    }

    foreach (var item in selectedCharacters)
    {
        testBlock.Text += string.Format(item.Key + "   " +
        item.Value + "\n");
     }
 }

static string[] SplitWords(string s)
{
    return s.Split(','); //It would do the same as regex
}

编辑:问题出在你的正则表达式上,运行下面的代码

String test = "me,you,they,are";
String[] arr=  Regex.Split(test, @"(.*?),");

foreach (string item in arr)
{
    Console.WriteLine("Word : {0}",item);
}

输出:错误输出,空字符串如下

word : 
word : me
word :
word : you
(...)

解决方案:使用String.Split()

String[] arr=  test.Split(',');

其他:通过 this 关于使用正则表达式进行拆分的回答