字典的IEnumerator是否保证一致?

时间:2013-01-25 16:33:09

标签: c# .net dictionary ienumerable

所以,我发现了一段这样的代码:

class CustomDictionary
{
  Dictionary<string, string> backing;
  ...
  public string Get(int index)
  {
    return backing.ElementAtOrDefault(index); //use linq extensions on IEnumerable
  }
}

然后就这样使用了:

for(int i=0;i<mydictionary.Count;i++)
{
  var value=mydictionary.Get(i);
}

除了这样做的性能问题和丑陋之外,这段代码实际上是否正确?也就是说,字典上的IEnumerable是否保证始终以相同的顺序返回事物,假设在迭代期间没有用字典修改任何内容?

3 个答案:

答案 0 :(得分:3)

这不保证。当然,它适用于SortedDictionary&lt;&gt;,也适用于数组和列表。但不是字典。

有可能,如果字典没有改变,它将是稳定的 - 但它不能保证。你必须问自己 - 你觉得幸运吗? ;)

答案 1 :(得分:1)

如果您想按照插入的顺序获取元素,那么您应该根据您首先想要的元素来查看StackQueue

答案 2 :(得分:0)

是的,你会得到相同的物品。

正如您所指定的那样,您提供的方法效率非常低。

ElementAtOrDefault是IEnumerable的LINQ扩展方法,意味着它将迭代到指定项目的每个项目。