C#在派生类中设置基础对象

时间:2016-02-02 04:56:25

标签: c#

我有以下课程:

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()。但是这种方法不会改变原始对象。它会返回一个新的。

有没有办法对字典进行排序?

1 个答案:

答案 0 :(得分:3)

您尝试的方法至少存在三个问题:

  1. 首先,as commenter Rob points outConcurrentDictionary<TKey, TValue>不保留顺序。它没有订购机制,如果确实如此,将来不会保证订单。
  2. base标识符(如this)是只读的。你无法分配它。
  3. base的类型为ConcurrentDictionary<int, string>(在您的示例中),但OrderByDescending()方法的返回值的类型为IEnumerable<KeyValuePair<int, string>>,因此无论如何都不能分配给变量base
  4. 如果您需要有序字典,则需要使用其他内容,例如: SortedDictionary<TKey, TValue>SortedList<TKey, TValue>。当然,这些都不是线程安全的,所以如果同时使用它们,你需要采取额外的步骤来安全地使用它们。