.NET的字典中的元素是否顺序?

ahm*_*md0 5 .net c# dictionary

比如,如果我创建这样的字典:

Dictionary<string, MyClass> dic = new Dictionary<string, MyClass>();

dic.add("z1", val1);
dic.add("abc9", val2);
dic.add("abc8", val3);
dic.add("ABC1", val4);
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时:

foreach (KeyValuePair<string, MyClass> kvp in dic)
{
}
Run Code Online (Sandbox Code Playgroud)

我保证将这些值检索为:"z1","abc9","abc8","ABC1"?

如果我第一次这样做,它会是:"z1","abc8","ABC1"?

dic.Remove("abc9");
Run Code Online (Sandbox Code Playgroud)

key*_*rdP 6

MSDN(强调我的)

出于枚举的目的,字典中的每个项目都被视为KeyValuePair<TKey, TValue>表示值及其键的结构.返回项的顺序未定义.

如果想要更多地控制迭代顺序,可能需要查看OrderedDictionary类.


Mik*_*sen 5

简短的回答是否定的.订单不保证在a Dictionary<TKey, TValue>,也不应指望维持订单.

您可能想要检查 OrderedDictionary.

例:

OrderedDictionary d = new OrderedDictionary();

d.Add("01", "First");
d.Add("02", "Second");
d.Add("03", "Third");
d.Add("04", "Fourth");
d.Add("05", "Fifth");

for(int i = 0; i < d.Count; i++) // Print values in order
{
   Console.WriteLine(d[i]);
}
Run Code Online (Sandbox Code Playgroud)

请注意,OrderedDictionary<TKey,TValue>由于某些奇怪的原因,没有通用版本.但是,这个问题有一些关于如何实现的问题.