C# 如果字典未被修改,Dictionary.Keys顺序是否保证相同?

C# 如果字典未被修改,Dictionary.Keys顺序是否保证相同?,c#,dictionary,C#,Dictionary,根据文件 Dictionary.KeyCollection中键的顺序为 未指明 好的,我同意。但是如果我不修改字典的键或它的值呢 如果我这样做了 Dictionary.Keys.ToList(); Thread.Sleep(5000) Dictionary.Keys.ToList(); 我可以安全地假设顺序是相同的吗?迭代字典是一个确定的过程。它基于在散列“bucket”、tie解析和插入顺序中组织项的具体实现方式 然而,迭代字典的顺序并不依赖于迭代之间可能发生变化的任意内容。您可以在字典的源

根据文件

Dictionary.KeyCollection中键的顺序为 未指明

好的,我同意。但是如果我不修改字典的键或它的值呢

如果我这样做了

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

我可以安全地假设顺序是相同的吗?

迭代
字典
是一个确定的过程。它基于在散列“bucket”、tie解析和插入顺序中组织项的具体实现方式


然而,迭代字典的顺序并不依赖于迭代之间可能发生变化的任意内容。您可以在
字典的源代码中看到迭代是如何完成的。枚举器
:它的
bool MoveNext()
方法逐个遍历
字典。条目[索引]
数组,在到达第一个未使用的元素时停止。因此,您可以放心地假设,在迭代之间不修改字典时,迭代字典的顺序不会改变。

通常直接查看源代码的速度最快:
我可以放心地假设顺序相同吗?
如果您谈论的是合同(因为合同上说它是未指定的,不保证的)-不。如果你谈论的是一个具体的实现,你可以看看源代码并对其行为进行解释。这在两个方面是有问题的(一般来说)-a)你可能会误解代码,因此,您的推理可能有缺陷b)无法保证其他实现(例如未来实现)将以相同的方式运行,因为它们只需要满足合同而不是当前实现