【发布时间】:2016-05-15 11:19:39
【问题描述】:
循环遍历 downloadedCase 对象的集合。目的是更新作为属性存在于每个 downloadedCase 对象上的 sorteddictionary (CSVFullColumnList)。
代码如下:
private void generateCSVRows()
{
foreach (NewCase downloadedCase in downloadedCases)
{
downloadedCase.CSVFullColumnList = this.columnsWithNoValuesFinal;
}
string columnNameLower;
foreach (NewCase downloadedCase in downloadedCases)
{
List<string> keys = new List<string>(columnsWithNoValues.Keys);
foreach (string columnName in keys)
{
columnNameLower = columnName.ToLower();
if (downloadedCase.CSVDataList.ContainsKey(columnNameLower))
{
downloadedCase.CSVFullColumnList[columnNameLower] = downloadedCase.CSVDataList[columnNameLower];
}
}
}
}
但是,当代码到达 if 语句中的赋值时,赋值会针对所有 downloadedCase 对象完成。例如,在第一次迭代时,集合中的第三个对象也会更新。此外,即使在赋值语句中没有分配任何内容,columnsWithNoValuesFinal 也会更新。
有人可以向我解释为什么会这样吗?
【问题讨论】:
-
你很可能在它们上都引用了同一个对象,这意味着你只有一个对象在玩。您很可能希望在第一个循环中克隆分配给每个下载案例的
columnsWithNoValuesFinal,以确保每个案例都有自己的副本,可以单独修改。
标签: c# list dictionary foreach