-1

因此,当节点为空时,我的代码停止运行,但是 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.dll 中出现“System.Collections.Generic.KeyNotFoundException”类型的未处理异常

附加信息:该键不在字典中。

4

5 回答 5

1

你不清楚你的问题,但我想你希望你的错误消失;)。而是这样做

 Node node;
 if(!nodeMap.ContainsKey(x))
 {
   node = nodeMap[x];
   node = new Node();
   node.Equals(x);
   nodeMap.Add(x, node);
}else
  node = nodeMap[x]

于 2014-04-03T13:43:47.173 回答
0

在尝试访问之前检查 x 是否存在:

Node node = nodeMap.Where(y => y.Key == x).FirstOrDefault());
if (node == null)
{
    node = new Node();
    node.Equals(x);
    nodeMap.Add(x, node);
}

希望这是有用的;)

于 2014-04-03T13:40:06.557 回答
0

使用 TryGetValue() 方法。如果节点存在,它将检索它,如果不存在,它将继续将该节点添加到字典中。无论发生哪种情况,它都允许您从那里使用节点对象。

Node node = null;
if(!nodeMap.TryGetValue(x, out node))
{
    node = new Node();
    node.Equals(x);
    nodeMap.Add(x, node);
}
于 2014-04-03T14:10:26.830 回答
-1

如文档中所述(http://msdn.microsoft.com/en-us/library/7w6691xh(v=vs.110).aspx

如果没有找到指定的键,get 操作会抛出 KeyNotFoundException

所以,没什么奇怪的。

于 2014-04-03T13:38:55.047 回答
-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有副作用,因此除非您使用返回值,否则不需要调用。

于 2014-04-03T14:22:39.133 回答