我有以下课程:
public class MyDict: ConcurrentDictionary<int, string>
{
public GenerateContent()
{
for(int i = 0 ; i < 10 ; i++)
{
this.TryAdd(i, i.ToString());
}
base = this.OrderByDescending(v => v.Key); // --> Error
}
}
在向基类添加一些值之后,我想对它进行排序。但ConcurrentDictionary<>
不提供Sort()
方法。因此我使用了OrderByDescending()
。但是这种方法不会改变原始对象。它会返回一个新的。
有没有办法对字典进行排序?
答案 0 :(得分:3)
您尝试的方法至少存在三个问题:
ConcurrentDictionary<TKey, TValue>
不保留顺序。它没有订购机制,如果确实如此,将来不会保证订单。base
标识符(如this
)是只读的。你无法分配它。base
的类型为ConcurrentDictionary<int, string>
(在您的示例中),但OrderByDescending()
方法的返回值的类型为IEnumerable<KeyValuePair<int, string>>
,因此无论如何都不能分配给变量base
。如果您需要有序字典,则需要使用其他内容,例如: SortedDictionary<TKey, TValue>
或SortedList<TKey, TValue>
。当然,这些都不是线程安全的,所以如果同时使用它们,你需要采取额外的步骤来安全地使用它们。