Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中的KeyNotFoundException#_C#_Dictionary - Fatal编程技术网

C# C中的KeyNotFoundException#

C# C中的KeyNotFoundException#,c#,dictionary,C#,Dictionary,我在这里遇到一个异常,在unbreakableLinkMap字典中找不到rootPartNo键 MyTree<IDbRecord> currentTree = PartHelper.GetTreeForRootId(succesorId, graph); #region TreeSheet string rootPartNo = currentTree.Root.Payload.GetField(Part.c_partNo).GetString(); //get spirit li

我在这里遇到一个异常,在
unbreakableLinkMap
字典中找不到
rootPartNo

MyTree<IDbRecord> currentTree = PartHelper.GetTreeForRootId(succesorId, graph);
#region TreeSheet
string rootPartNo = currentTree.Root.Payload.GetField(Part.c_partNo).GetString();

//get spirit links
var spiritLinks = graph.unbreakableLinkMap[rootPartNo];
Worksheet treeWS = excel.Worksheets[2];
treeWS.Name = "Tree";
long displayedPartId = long.Parse(GetIdFromSession(Part.t_name));
int rowNo = 0;
bool bold = false;
Color color = Color.Black;
foreach (MyTreeNode<IDbRecord> node in currentTree.Root.DepthFirstNodeEnumerator)
{
    string partNo = node.Payload.GetField(Part.c_partNo).GetString();
    treeWS.Cells[rowNo, node.Depth].PutValue(partNo);
    bold = false;
    color = Color.Black;
    if (spiritLinks.Find(suc => suc.PartNo == partNo || suc.SucPartNo == partNo) != null)
    {
        color = Color.Red;
    }
    if (node.Payload.GetField(Part.c_id).GetInt64() == displayedPartId)
    {
        bold = true;
    }

    headerFStyle.Font.IsBold = bold;
    headerFStyle.Font.Color = color;
    treeWS.Cells[rowNo, node.Depth].SetStyle(headerFStyle);
    rowNo++;
}
MyTree currentTree=PartHelper.GetTreeForRootId(succesorId,graph);
#区域树街
string rootPartNo=currentTree.Root.Payload.GetField(Part.c_partNo.GetString();
//获取精灵链接
var-spiritLinks=graph.unbreakableLinkMap[rootPartNo];
工作表treeWS=excel.Worksheets[2];
treeWS.Name=“Tree”;
long displayedPartId=long.Parse(GetIdFromSession(Part.t_name));
int rowNo=0;
布尔黑体=假;
颜色=颜色。黑色;
foreach(currentTree.Root.DepthFirstNodeUnumerator中的MyTreeNode节点)
{
string partNo=node.Payload.GetField(Part.c_partNo.GetString();
单元格[rowNo,node.Depth].PutValue(partNo);
粗体=假;
颜色=颜色。黑色;
if(spiritLinks.Find(suc=>suc.PartNo==PartNo | | suc.SucPartNo==PartNo)!=null)
{
颜色=颜色。红色;
}
if(node.Payload.GetField(Part.c_id).GetInt64()==displayedPartId)
{
粗体=真;
}
headerStyle.Font.IsBold=粗体;
HeaderStyle.Font.Color=颜色;
单元格[rowNo,node.Depth].SetStyle(headerStyle);
rowNo++;
}

我如何检查/验证它?

好吧,您必须进行调试。将断点放在

  var spiritLinks = graph.unbreakableLinkMap[rootPartNo];
行,运行例程并检查问题值:

  rootPartNo
还有字典键

  graph.unbreakableLinkMap.Keys
如果出于任何原因无法使用调试器,请添加调试输出

  ...
  string rootPartNo = currentTree.Root.Payload.GetField(Part.c_partNo).GetString();

  // Debug output: when key is not found, show additional info
  if (!graph.unbreakableLinkMap.ContainsKey[rootPartNo])
    MessageBox.Show(String.Format(
      "Key to find is \"{0}\" and keys in the dictionary are\r\n{1}", 
      rootPartNo, 
      String.Join(", ", graph.unbreakableLinkMap.Keys)));

  ...

嗯,你必须调试。将断点放在

  var spiritLinks = graph.unbreakableLinkMap[rootPartNo];
行,运行例程并检查问题值:

  rootPartNo
还有字典键

  graph.unbreakableLinkMap.Keys
如果出于任何原因无法使用调试器,请添加调试输出

  ...
  string rootPartNo = currentTree.Root.Payload.GetField(Part.c_partNo).GetString();

  // Debug output: when key is not found, show additional info
  if (!graph.unbreakableLinkMap.ContainsKey[rootPartNo])
    MessageBox.Show(String.Format(
      "Key to find is \"{0}\" and keys in the dictionary are\r\n{1}", 
      rootPartNo, 
      String.Join(", ", graph.unbreakableLinkMap.Keys)));

  ...

通常,当为访问集合中的元素指定的键与集合中的任何键不匹配时,会出现此异常

我建议您使用调试器,查看
字典中的

如果您不确定密钥是否存在,我建议您使用
ContainsKey
TryGetValue
编写防御代码

if (graph.unbreakableLinkMap.ContainsKey(key)) 
{
     ... 
}


通常,当为访问集合中的元素指定的键与集合中的任何键不匹配时,会出现此异常

我建议您使用调试器,查看
字典中的

如果您不确定密钥是否存在,我建议您使用
ContainsKey
TryGetValue
编写防御代码

if (graph.unbreakableLinkMap.ContainsKey(key)) 
{
     ... 
}


你使用调试器了吗?是的。它没有显示太多,只是字典没有值。检查/验证什么?如果字典上说钥匙不在里面,那就不是了。您不需要检查/验证这一点。可能发生的情况是,键的大小写不同(默认情况下,字典区分大小写)。您还可以使用
Contains()
TryGet()
方法来避免异常,并首先检查值是否在其中。似乎您的
rootPartNo
值或字典有误。能否提供
rootPartNo值以及字典键:
String.Join(“,”,graph.unbreakableLinkMap.keys)?如果字典没有值。。。也就是说,你用过调试器吗?是的。它没有显示太多,只是字典没有值。检查/验证什么?如果字典上说钥匙不在里面,那就不是了。您不需要检查/验证这一点。可能发生的情况是,键的大小写不同(默认情况下,字典区分大小写)。您还可以使用
Contains()
TryGet()
方法来避免异常,并首先检查值是否在其中。似乎您的
rootPartNo
值或字典有误。能否提供
rootPartNo值以及字典键:
String.Join(“,”,graph.unbreakableLinkMap.keys)?如果字典没有值。。。这说明了很多