Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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产生异常结果的分类词典-Mk2_C#_Sorteddictionary - Fatal编程技术网

C# C产生异常结果的分类词典-Mk2

C# C产生异常结果的分类词典-Mk2,c#,sorteddictionary,C#,Sorteddictionary,我认为我在上一个问题中没有发布足够的细节,人们似乎停止了回应,所以我重新发布,因为我们需要知道为什么会发生这个问题 我正在处理一个SortedDictionary,当我们循环遍历它时,会得到奇怪的结果 涉及到很多嵌套,最终的字典实际上是另一个字典的子字典,而另一个字典是另一个字典的子字典 是完整的巢 SortedDictionary<String, SortedDictionary<String, SortedDictionary<int, SortedDictionary&l

我认为我在上一个问题中没有发布足够的细节,人们似乎停止了回应,所以我重新发布,因为我们需要知道为什么会发生这个问题

我正在处理一个SortedDictionary,当我们循环遍历它时,会得到奇怪的结果

涉及到很多嵌套,最终的字典实际上是另一个字典的子字典,而另一个字典是另一个字典的子字典

是完整的巢

SortedDictionary<String, SortedDictionary<String, SortedDictionary<int, SortedDictionary<String, String>>>>()
我正在翻阅的字典是

SortedDictionary<int, SortedDictionary<String, String>>
下面是循环:

foreach (SortedDictionary<String, String> cDic in openTrades.Values)
{
    String cTimestamp = convertTimestamp(cDic["open"]);
    if (!closeTrades.ContainsKey(cDic["key"]) && barArray.ContainsKey(cDic["pair"]))
    {
          foreach (SortedDictionary<String, String> bDic in barArray[cDic["pair"]][cDic["frame"]].Values)
          {
               //This is the relative Loop
          }
    }
}
barArray是我们的主要分类词典,也是这个问题的主题 openTrades是另一种分类词典

现在,当我们用一个整数作为索引在字典中循环时,我们会得到不同的结果——也就是说,如果我们用1,2,3,4作为键,循环时可能会按如下顺序显示它们:4,2,1,3,这显然没有意义,因为这是一个排序字典

如果能尽快提供帮助,我将不胜感激,因为我在这个问题上举步维艰。 谢谢
詹姆斯

我的直觉是你误解了你看到的结果。在您显示的循环中,您不是在int键中循环,而是在值列表中循环。因此,您无法确定int键实际返回的顺序

您可能在SortedDictionary本身中有一些东西,它应该指示它所属的封闭字典中的哪个int。我可以想象,在形成这些值的过程中存在一些错误,因此键中的int实际上与值不匹配


我建议缩小范围,通过openTrades而不是openTrades.Values进行交易。这样,您将能够在返回的KeyValuePair中看到真正的密钥。我很确定它们看起来是有序的。

在我看来,你应该能够拿出一个简短但完整的程序来演示问题,但不需要所有这些嵌套。你能解释一下barArray和OpenTrade的实现吗?我之所以添加嵌套,是因为它的形式最简单——这是很好用,但是当它嵌套时就不行了!Navid您还需要什么解释?谢谢您的评论,但是当字典没有嵌套时,同一个循环可以完美地工作,但是当它嵌套时,就是我们看到问题的时候。我不建议更改任何有关嵌套的内容。我刚刚提供了一种修改foreach循环的方法,因此代码的功能保持不变,但是,您有更好的机会了解发生了什么,因为您有当前实键的附加信息。在将数据添加到已排序的字典中之前,会创建实键,然后在最终的字典中形成键和值。但是我尝试使用一个KeyValuePair,我得到了相同的结果,它在字典中不正确地迭代。您可以发布修改后的代码,在其中使用KeyValuePair进行迭代,并将密钥从密钥-值对中转储到某个文件、控制台、错误日志中,任何对您来说最简单的地方,然后在此处发布转储,因此,我们可以看到转储密钥的代码和转储结果。也可能有助于创建一个我们可以运行的小程序来演示问题,但是我猜发布日志代码和日志会更容易。