是Dictionary.Keys订单保证如果没有修改字典是相同的?

时间:2018-04-08 23:39:25

标签: c# dictionary

基于doc

  

Dictionary.KeyCollection中键的顺序是   未指定的

好的,我很好。但是,如果我没有修改字典的密钥及其值,那该怎么办呢?

让我们说如果

Dictionary.Keys.ToList();
Thread.Sleep(5000)
Dictionary.Keys.ToList();

我可以安全地假设订单会一样吗?

1 个答案:

答案 0 :(得分:3)

迭代Dictionary是一个确定性过程。它基于特定于实现的方式,在哈希“桶”,联系解析和插入顺序中组织项目。

但是,迭代字典的顺序并不依赖于任何可能在迭代之间发生变化的事物。您可以在Dictionary.Enumerator here的源代码中看到迭代是如何完成的:它的bool MoveNext()方法逐个遍历dictionary.entries[index]数组,在到达第一个未使用的元素时停止。因此,您可以安全地假设当您不在迭代之间修改字典时,迭代字典的顺序不会改变。