C# 循环访问嵌套键值对

c# iterate over nested key value pair

提问人:user1279156 提问时间:6/17/2023 更新时间:6/17/2023 访问量:66

问:

我有一个,对象也是一个 KeyValuePair。我一直在尝试将对象转换为新的 KeyValuePair,以便可以遍历值,但到目前为止,所有尝试都失败了。有人有什么想法吗?谢谢。KeyValuePair<string,object>

var installers = manifestDict.Where(kvp => kvp.Key.Equals("Installers"));
foreach(var i in installers)
{
     var newKvp = i.Value;
     //how to cast this object to a new kvp?
}

enter image description here

C# 嵌套 键值

评论

0赞 user1279156 6/17/2023
不起作用,因为它不是 IEnumerable,并且我将其转换为 IEnumerable 的所有尝试都失败了。
1赞 DasKrümelmonster 6/17/2023
我怀疑你没有投到正确的类型。尝试调试它。Console.WriteLine(i.Value.GetType());

答:

1赞 Ziv Weissman 6/17/2023 #1

在我看来,这是另一本字典,不是吗?

所以你应该把它强制转换为 Dictionary<string, object>

var installers = manifestDict.Where(kvp => kvp.Key.Equals("Installers"));
foreach(var i in installers)
{
     var newKvp = (Dictionary<string, object>)i.Value;
     //how to cast this object to a new kvp?
}

顺便说一句,如果你确定你有那个键,你也可以这样写它:

var installers = (Dictionary<string, object>)manifestDict["Installers"];
foreach(var installer in installers)
{
     //This will itenrate all your key value pairs inside installers
     Console.WriteLine(installer.Value);
}

评论

0赞 user1279156 6/17/2023
关闭。这就是我正在尝试的,但它仍然抛出了一个例外。
0赞 user1279156 6/17/2023 #2

最后,我需要先投射到一个列表中。

 foreach(var i in installers)
 {
      var newKvp = i.Value as List<object>;
      foreach(var z in newKvp)
      {
           var result = (Dictionary<object,object>) z;
      }
 }