字典KeyNotFoundException不给出错误...为什么?

时间:2013-12-02 20:47:40

标签: c# winforms dictionary

这个问题不是为什么会出错...而是为什么它不是给出错误...

private void Form1_Load(object sender, EventArgs e)
{
    Dictionary<string, string> dic = new Dictionary<string, string>();
    dic["666bytes"] = "ME";
    MessageBox.Show(dic["should_give_error"]);
}

这应该给出错误,对吗?因为dic [“should_give_error”]不存在但它没有给出错误(表格正常加载)。但我可以用 try..catch(KeyNotFoundException)块来捕获它...怎么来的?

3 个答案:

答案 0 :(得分:1)

我怀疑你实际上并没有Form1_Load。这是一个简短但完整的程序,用于演示按预期抛出的异常:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

class Test
{
    static void Main()
    {
        Form form = new Form();
        form.Load += Form1_Load;
        Application.Run(form);
    }

    private static void Form1_Load(object sender, EventArgs e)
    {
        Dictionary<string, string> dic = new Dictionary<string, string>();
        dic["666bytes"] = "ME";
        MessageBox.Show(dic["should_give_error"]);
    }
}

编译并运行它,然后会出现一个异常对话框。

答案 1 :(得分:0)

你必须更好地阅读documentation。引用:

// If a key does not exist, setting the indexer for that key 
// adds a new key/value pair.
openWith["doc"] = "winword.exe";

所以,当你调用dic["should_give_error"]程序时,哦,那个键不存在,所以让我们创建一个。所以它会这样做,并返回一个空字符串。

编辑:好的,当您尝试获取不存在的键时,它不会返回空字符串,但是load事件在某些条件下不会抛出异常。但是如果你保持原样,你应该为键"should_give_error"设置一个空值。

答案 2 :(得分:0)

我确实找到了答案(这是一个BUG,而不是我期待的答案),这里有参考资料......

  1. Reference # 1
  2. Reference # 2
  3. Reference # 3