使用通用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);
}
忽略您尝试做的事情可能没有意义这一点,您可以创建一个从IDictionary
到IEnumerable<DictionaryEntry>
:的适配器
IEnumerable<DictionaryEntry> EnumerateEntries(IDictionary d)
{
foreach (DictionaryEntry de in d)
{
yield return de;
}
}
// ...
genericDictionary = EnumerateEntries(genericDictionary).OrderBy(…).ToDictionary(…);
(出于某种原因,我没有进一步研究,使用genericDictionary.Cast<DictionaryEntry>()
而不是helper方法对我不起作用,但这可能是Mono的一个怪癖。(