4

所以,我找到了这样一段代码:

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 始终以相同的顺序返回内容,假设在迭代期间没有任何内容被字典修改?

4

3 回答 3

3

这不能保证。当然,它适用于 SortedDictionary<>,也适用于数组和列表。但不适用于字典。

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

于 2013-01-25T16:35:37.657 回答
1

如果您想按插入的顺序获取元素,那么您可能应该根据您首先想要的元素查看堆栈队列。

于 2013-01-25T16:36:33.780 回答
0

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

正如您所指定的,您提出的方法是非常低效的方法。

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

于 2013-01-25T16:49:29.490 回答