Enumerable.First()
当您在Dictionary
集合的实例上调用它时,.NET 3.5扩展方法的含义是什么?
密钥集是确定哪个项目是第一个,还是仅仅未定义?
好吧,我相信一组密钥将决定哪个项目是第一个,但不是以明确定义(或易于预测)的方式.换句话说,不要假设它总是以相同的方式工作 - 它依赖于在运行之间保持相同的哈希码实现是不安全的.
编辑:我相信事实上,插入的顺序确实很重要,这与我之前的想法相反.但是,这是特定于实现的(因此可以在下一版本中轻松更改).我相信,对于当前的实现,添加的第一个条目将是第一个返回的条目,如果它尚未被删除.如果添加的第一个条目被删除,则排序被破坏 - 并不是最早的条目被删除.这是一个例子:
using System; using System.Collections.Generic; class Test { static void Main(string[] args) { var dict = new Dictionary(); dict.Add(0, 0); dict.Add(1, 1); dict.Add(2, 2); dict.Remove(0); dict.Add(10, 10); foreach (var entry in dict) { Console.WriteLine(entry.Key); } Console.WriteLine("First key: " + dict.First().Key); } }
结果是10,1,2和"第一个键:10" - 显示最新添加的条目最终返回.
但是,我想再次强调一切都可以在框架版本之间发生变化.