【发布时间】:2020-07-29 14:22:39
【问题描述】:
我目前面临一个问题,我想在 foreach 循环中向同一个 Key 添加不同的值。
List<KeyValuePair<string, Dictionary<string, string>>> sysList = new List<KeyValuePair<string, Dictionary<string, string>>>();
Dictionary<string, string> newSystem = new Dictionary<string, string>();
string line1="";
string line2="";
string quit="";
foreach(Worksheet ws in workbook.Worksheets)
{
while(quit != q)
{
newSystem.Clear();
line1 = Console.ReadLine();
line2 = Console.ReadLine();
quit = Console.ReadLine();
}
newSystem.Add(line1, line2);
sysList.Add(new KeyValuePair<string, Dictionary<string, string>>(ws.Name,newSystem));
}
对于第一个 Worksheet 的第一次迭代(在一段时间内),一切都很好。如果我选择在此工作表中进行 >1 次迭代,则会添加一个新条目,但字典值都相同,f.e.:
syList[0]: "worksheetName","test1","test2"
syList[1]: "worksheetName","test1","test2"
syList[2]: "worksheetName","test1","test2"
如果有多次foreach迭代,名称保持不变,但newSys添加的Dictionary Key和Values相同[在第二次foreach迭代之后]:
syList[0]: "worksheetName1","test1","test2"
syList[1]: "worksheetName1","test1","test2"
syList[2]: "worksheetName1","test1","test2"
syList[3]: "worksheetName2","test1","test2"
syList[4]: "worksheetName2","test1","test2"
最初我尝试使用字典,但无法正确处理相同的键,并且除了使用列表之外没有找到合适的解决方案。
我非常感谢提供的任何帮助。 如果您需要其他详细信息,请告诉我。
编辑: 期望的结果(示例):
#########: ws.Name, line1, line2
syList[0]: "worksheetName1","ABC","1"
syList[1]: "worksheetName1","DEF","2"
syList[2]: "worksheetName1","ABC","5"
syList[3]: "worksheetName2","ABD","4"
syList[4]: "worksheetName2","ZZZ","1"
【问题讨论】:
-
您需要更新
newSystem。你不能只是清除它然后重新添加它。newSystem是一个参考,所以你对它所做的一切,都是对列表中的所有项目完成的。 -
@jdweng:我很难在每次迭代中正确地将值添加到该列表中。我不知道如何在我的 foreach 循环中添加值。
-
@julezQ 如果您将
newSystem字典的声明移动到foreach循环中,它将解决您的问题。但是你的代码对我来说看起来很奇怪。为什么将dictionary用于newSystem?为什么在while循环的每次迭代中都清除它? -
@Palle Due 感谢您的帮助,我将 newSystem 放在了 while -Loop 之前。在同一个工作表中它现在正在工作,但不幸的是,如果下一次迭代发生,它会覆盖之前的所有值。我错过了什么?
-
我有一个错字。请参阅以下内容:您不需要字典。可以使用 :List
>>> kvp = new List >>>();或使用字典 Dictionary >> 当一个键有多个值时,字典中的值需要是一个列表。
标签: c# .net .net-core keyvaluepair