更改C#字典中项目的基数

Asm*_*mor 4 c# dictionary cardinality

我有一本字典,就像

Dictionary<Foo,String> fooDict
Run Code Online (Sandbox Code Playgroud)

我逐步完成字典中的所有内容,例如

foreach (Foo foo in fooDict.Keys)
    MessageBox.show(fooDict[foo]);
Run Code Online (Sandbox Code Playgroud)

它按照foos添加到字典的顺序执行此操作,因此添加的第一个项目是返回的第一个foo.

如何更改基数,例如,添加的第三个foo将返回第二个foo?换句话说,我想改变它的"索引".

Cod*_*ick 8

如果您阅读MSDN上的文档,您会看到:

"返回项目的顺序是不确定的."

您无法保证订单,因为字典不是列表或数组.它意味着通过键查找值,任何迭代值的能力只是一种便利,但顺序不是你应该依赖的行为.


Eri*_*ver 5

您可能对命名空间中的OrderedDicationary类感兴趣System.Collections.Specialized.

如果你看一下最底层的评论,MSFT的某个人发布了这个有趣的说明:

这种类型实际上是错误的; 它不是一个"有序"字典,而是一个"索引"字典.虽然,今天没有这种类型的等效通用版本,如果我们将来添加一个,我们可能会命名为'IndexedDictionary'类型.

我认为从这个类派生并制作OrderedDictionary的通用版本是微不足道的.