c# – 如何检索Dictonary <?,?>中包含的所有KeyValuePai
发布时间:2020-12-15 19:48:32 所属栏目:百科 来源:网络整理
导读:我有一个对象是一个未知类型的字典(即我不知道键的类型和值) 我想检索它的所有值,以便我可以通过索引访问它们. 所以我想做的是这样的: Dictionaryobject,object d = (Dictionaryobject,object)obj; // cast errorl = new ListKeyValuePairobject,object();f
我有一个对象是一个未知类型的字典(即我不知道键的类型和值)
我想检索它的所有值,以便我可以通过索引访问它们. 所以我想做的是这样的: Dictionary<object,object> d = (Dictionary<object,object>)obj; // cast error l = new List<KeyValuePair<object,object>>(); foreach (KeyValuePair<object,object> k in d) l.Add(new KeyValuePair<object,object>(k.Key,k.Value)); 但是,正如预期的那样,运行时不会让我转换为Dictionary<对象,对象>. 有没有办法在.net 3.0中执行此操作? (例如使用反射?) 解决方法
你不能将obj强制转换为Dictionary< object,object>因为它不是字典< object,object>.是的,它的键和值来自于对象,因此可以转换为对象.但是你不能在C#中转换泛型类型,因为它们不是协变的.即使T来自对象,List< T>不是从List< object>派生的.
考虑这种方法: void ModifyList<List<object> list) { for (int i=0; i<list.Count; i++) { list[i] = list[i].ToString(); } } 如果你可以转换List< int>列表< object>,您可以传递List< int>到那个方法,它会变成别的东西. 当在C#4.0中引入协变泛型时,这将会改变. This article是对所涉问题的一个很好的解释. 但要解决您的实际问题,这将解决问题: List<KeyValuePair<object,object>> list = d.AsEnumerable() .Select(x => new KeyValuePair<object,object>(x.Key,x.Value)) .ToList(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |