这个问题不是为什么会出错...而是为什么它不是给出错误...
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)块来捕获它...怎么来的?
答案 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,而不是我期待的答案),这里有参考资料......