我有一个字典,其中的值是在运行时确定的。我可以将其创建为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
to IEnumerable<DictionaryEntry>
:
IEnumerable<DictionaryEntry> EnumerateEntries(IDictionary d)
{
foreach (DictionaryEntry de in d)
{
yield return de;
}
}
// ...
genericDictionary = EnumerateEntries(genericDictionary).OrderBy(…).ToDictionary(…);
(出于某种原因,我没有进一步调查,使用genericDictionary.Cast<DictionaryEntry>()
而不是辅助方法对我不起作用,但这可能是 Mono 的怪癖。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)