起初我的想法就像"这是一个基于散列的数据类型,然后它是未分类的".
然后,由于我即将使用它,我深入研究了这个问题,发现这个类实现了IEnumerable
,并且这个帖子也证实了可以迭代这种数据.
所以,我的问题是:如果我使用foreach
的是ConcurrentDictionary
哪个是我读取元素的顺序?
然后,作为第二个问题,我想知道它的接口继承的排序方法是否具有任何用途.如果我ConcurrentDictionary
在新订单上调用排序方法会持续存在(例如传入foreach
)?
希望我已经清楚了
当前的实现没有对元素的顺序做出任何承诺.未来的实现可以轻松更改枚举元素的顺序.
因此,您的代码不应该依赖于该顺序.
来自Dictionary<TKey, TValue>
msdn文档:
返回项的顺序未定义.
(我找不到任何有关的参考ConcurrentDictionary
,但同样的原则适用.)
当您引用"其接口继承的排序方法"时,您的意思是LINQ扩展吗?喜欢OrderBy
?如果是这样,这些扩展是纯粹的功能,并始终返回一个新的集合.那么,回答你的问题"新订单会持续存在吗?":不,它不会.但是你可以像这样使用它:
foreach(KeyValuePair<T1, T2> kv in dictionary.OrderBy(...)) { }