我有以下代码创建并返回Dictionary<int, List<string>>
private static readonly Random rnd = new Random();
private static Dictionary<int, List<string>> GenerateValues(string entityType, int rows)
{
var values = new Dictionary<int, List<string>>();
var baseValues = new List<string> { "99 Hellesdon Road","Home","Norfolk","NR6 5EG","Norwich" };
Action<int> rowLoop = null;
switch (entityType)
{
case "Employer":
rowLoop = (row) =>
{
var employer = new List<string>
{
$"Employer {rnd.Next(10000, 99999)}",
$"{rnd.Next(100000000, 999999999)}",
"TRUE"
};
var rowValue = baseValues;
rowValue.AddRange(employer);
values.Add(row, rowValue);
};
break;
case "AssessmentCentre":
rowLoop = (row) =>
{
var rowValue = baseValues;
rowValue.Add($"Assessment Centre {rnd.Next(10000, 99999)}");
values.Add(row, rowValue);
};
break;
}
for (int i = 1; i <= rows; i++)
{
rowLoop(i);
}
return values;
}
然后用...来调用它。
var spreadsheetValues = GenerateValues("Employer", 5);
然后代码的意图是将一些基值存储在List<string>
中,然后根据传递给方法的entityType
,为这些基值添加一些额外的值。然后循环一定数量的行以创建Dictionary<int, List<string>>
,其中int
是行号。
我遇到的问题是我的for循环的每次迭代都会更新baseValues
。使用var rowValue = baseValues;
这是集合中最后一项的调试屏幕截图....
我希望List<string>
中的每个Dictionary<int, List<string>>
包含8个项目,但每次迭代都会增长。
为什么会发生这种情况,我该如何纠正呢?
答案 0 :(得分:3)
您似乎已经开始解决问题,但这是解决问题的方法。
你写的地方
var rowValue = baseValues;
你真的只是让“rowValue”指向“baseValues”。要制作副本,您可以执行以下操作:
var rowValue = baseValues.ToList();