加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读