如何遍历字典中的不同层次



我已经阅读了许多关于如何使用foreach迭代Dictionary的文档,但我不太明白如何通过它所具有的关卡。例如:

我有"params"字典,我添加字符串和对象值到它,与.Add(),并在其中一个我添加一个级别称为"item"

据我所知,与Foreach(KeyValueaPair<>),它是通过字典迭代。我是否需要使用另一个foreach(KeyValuePair<>)能够循环通过第二个级别?

例如,我想要"param"获取Posnr输入的元素

的值
IDictionary<string, object> params = new Dictionary<string, object>();
params.Add("Customerid", zwCustomer.Customerid);
params.Add("PedidoCli", zwCustomer.PedidoCli);
params.Add("PedidoSap", zwCustomer.PedidoSap);
params.Add("TFacturaMat", new Dictionary<string, object>()
{
{
"item", new Dictionary<string, object>()
{
{"Vbeln", zfacturaMats.Vbeln},
{"Posnr", zfacturaMats.Posnr},
{"Matnr", zfacturaMats.Matnr},
}
},
});
foreach(KeyValuePair<string, object> item in parametros)
{
param = $"{item.Key} : {item.Value}";
}

不,你可以直接这样做。. net库的Dictionary<TKey, TValue>类已经为您完成了所有这些神奇的工作。

使用foreach循环

foreach(KeyValuePair<string, object> item in params)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}

您已经遍历了字典中的所有元素。从用法的角度来看,这与params是一个List完全相同(除了没有保证顺序)。

如果你想要一个特定的元素,你有多种可能性,但在最简单的情况下,你可以通过var myValue = params["PosNr"]获得一个元素。或者,您可以使用TryGetValue()方法来测试某个键是否存在。

所以底线是:了解字典的内部工作方式很有趣,但是当你使用。net库时,你不必关心这个。迭代和访问是开箱即用的。

最新更新