我有一个字典,其值在运行时确定。我可以将其创建为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);
}
答案 0 :(得分:4)
忽略您尝试做的事情可能没有意义,您可以创建从IDictionary
到IEnumerable<DictionaryEntry>
的适配器:
IEnumerable<DictionaryEntry> EnumerateEntries(IDictionary d)
{
foreach (DictionaryEntry de in d)
{
yield return de;
}
}
// ...
genericDictionary = EnumerateEntries(genericDictionary).OrderBy(…).ToDictionary(…);
(出于某种原因,我没有进一步调查,使用genericDictionary.Cast<DictionaryEntry>()
而不是帮助方法对我不起作用,但这可能是一个单声道的怪癖。)