使用通用Dictionary和/或使用IDictionary进行排序

本文关键字:排序 IDictionary Dictionary | 更新日期: 2023-09-27 18:01:00

我有一个字典,其中的值是在运行时确定的。我可以将其创建为IDictionary并添加到其中,但我无法排序。有没有办法把它创建为Dictionary,这样我就可以访问OrderBy,或者有没有其他办法把它排序为IDictionary

void func (PropertyDescriptor prop)
{
  //Create dynamic dictionary
  Type GenericTypeDictionary = typeof(Dictionary<,>);
  Type SpecificTypeDictionary = GenericTypeDictionary.MakeGenericType(typeof(T), prop.PropertyType);
  var genericDictionary = Activator.CreateInstance(SpecificTypeDictionary) as IDictionary ;
  //Add some items to it
  //....
  //Sort items (this line doesn't compile)
  genericDictionary = genericDictionary.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
}

使用通用Dictionary和/或使用IDictionary进行排序

忽略您尝试做的事情可能没有意义这一点,您可以创建一个从IDictionaryIEnumerable<DictionaryEntry>:的适配器

IEnumerable<DictionaryEntry> EnumerateEntries(IDictionary d)
{
    foreach (DictionaryEntry de in d) 
    {
        yield return de;
    }
}
// ...
genericDictionary = EnumerateEntries(genericDictionary).OrderBy(…).ToDictionary(…);

(出于某种原因,我没有进一步研究,使用genericDictionary.Cast<DictionaryEntry>()而不是helper方法对我不起作用,但这可能是Mono的一个怪癖。(