因此,当节点为空时,我的代码停止运行,但是i。
Node node = nodeMap[x]; (BREAKS HERE case x isn't in the tree yet)
if(node == null)
{
node = new Node();
node.Equals(x);
nodeMap.Add(x, node);
}
错误:未处理的类型' System.Collections.Generic.KeyNotFoundException'发生在System.dll
中
附加信息:密钥不在字典中。
答案 0 :(得分:1)
你不清楚你的问题,但我认为你希望你的错误消失;)而不是
Node node;
if(!nodeMap.ContainsKey(x))
{
node = nodeMap[x];
node = new Node();
node.Equals(x);
nodeMap.Add(x, node);
}else
node = nodeMap[x]
噗
答案 1 :(得分:0)
在尝试访问x之前检查x是否存在:
Node node = nodeMap.Where(y => y.Key == x).FirstOrDefault());
if (node == null)
{
node = new Node();
node.Equals(x);
nodeMap.Add(x, node);
}
希望这很有用;)
答案 2 :(得分:0)
使用TryGetValue()方法。如果节点存在,它将检索它,如果不存在,它将继续将该节点添加到字典中。无论发生哪种情况,它都允许您从那里使用节点对象。
Node node = null;
if(!nodeMap.TryGetValue(x, out node))
{
node = new Node();
node.Equals(x);
nodeMap.Add(x, node);
}
答案 3 :(得分:-1)
如文档(http://msdn.microsoft.com/en-us/library/7w6691xh(v=vs.110).aspx)
中所述如果找不到指定的键,则get操作会抛出一个 KeyNotFoundException
所以,没什么奇怪的。
答案 4 :(得分:-1)
使用ContainsKey
方法检查它是否存在。我认为你会另外添加它:
if(!nodeMap.ContainsKey(x))
{
nodeMap.Add(x, new Node());
}
// now you're sure it does exist, as you added it
// above
Node node = nodeMap[x];
我删除了Equals
的调用。在任何情况下都不应该Equals
有副作用,因此除非您使用返回值,否则不需要调用。