为什么.Net字典看起来像是排序的?

Eld*_*rum 6 .net c# sorting dictionary hashtable

我正在查看我的同事签入的一些代码,它看起来像这样:

return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
Run Code Online (Sandbox Code Playgroud)

我立即告诉我的同事他的代码是错误的,因为它Dictionary是一个哈希表,一个非排序的集合.他应该使用保留订单的集合,或者稍后当他从字典中读取它们时对它们进行排序foreach,我说.

但他回答说"不,不,我的代码是正确的!看:现在我已添加了OrderBy,项目按正确的顺序出现."

事实证明,在测试用例中,他是对的.我尝试了其他一些数据,但它仍然完美排序!

我告诉他,他不应该依赖这种行为,但他不同意,我无法解释原因.此外,我很感兴趣为什么这个订单似乎经常被保留下来.

所以我的问题是......为什么Dictionary一个从根本上未分类的集合看起来非常像它被排序?

ken*_*n2k 7

它是按照Dictionary实现的方式排序的(在您的情况下,项目按顺序添加).但这是实施细节.

告诉你的同事有一个存在的SortedDictionary类,这应该说服他我们不能依赖简单的项目顺序Dictionary;)