SortedDictionary - 如果node为null,则无法继续

时间:2014-04-03 13:33:09

标签: c# generics idictionary

因此,当节点为空时,我的代码停止运行,但是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

附加信息:密钥不在字典中。

5 个答案:

答案 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有副作用,因此除非您使用返回值,否则不需要调用。