我已经阅读了许多关于如何使用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库时,你不必关心这个。迭代和访问是开箱即用的。