循环遍历 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 也会更新。
有人可以向我解释为什么会这样吗?
答案 0 :(得分:6)
你正在使用对象,这些被称为“引用类型”,这意味着你有两件作品:
在这种情况下,您有一个对象,最初由columnsWithNoValuesFinal
字段/变量引用。
然后将此引用分配给每个下载案例的CSVFullColumnList
属性。您正在制作参考的副本,但不 对象。
所以你最终得到了1个对象和许多引用。
您可能应该在第一个循环中复制/克隆此对象,并将副本分配给每个下载的案例,这将使所有对象分离并分离,更改一个不会更改其他对象。
但是现在,你只是改变了你拥有的一个对象,这看起来就像是你改变了所有对象。