在审查一个应用程序的代码时,我发现它假定顺序与Dictionary.Values
添加到集合中的元素相同。
我编写了应用程序来测试这是否属实:
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, int> values = new Dictionary<string, int>();
values.Add("apple2", 2);
values.Add("apple3", 3);
values.Add("apple4", 4);
values.Add("apple5", 5);
values.Add("apple6", 6);
values.Add("apple1", 1);
var list = new List<int>(values.Values);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
}
}
}
输出是:
2
3
4
5
6
1
首先我想知道这怎么可能。字典不应该使用无序树或类似的东西吗?
此外,MSDN 指出:
中值的顺序
Dictionary<TKey, TValue>.ValueCollection
未指定,但Dictionary<TKey, TValue>.KeyCollection
与 Keys 属性返回的关联键的顺序相同。
那么为什么 MSDN 告诉“订单未指定”但实现恰好保持订单?我是否正确,我最好不要依赖这个事实?