Fre*_*e2k 0 c# foreach dictionary list
循环遍历一组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];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当代码到达if语句内的赋值时,将对所有downloadedCase对象完成赋值.例如,在第一次迭代中,集合中的第三个对象也会更新.此外,columnsWithNoValuesFinal也会更新,即使在赋值语句中没有为其分配任何内容.
有人可以向我解释为什么会这样吗?
你正在使用对象,这些被称为"引用类型",这意味着你有两件作品:
在这种情况下,您有1个对象,最初由columnsWithNoValuesFinal字段/变量引用.
然后,将此引用分配给CSVFullColumnList每个下载案例的属性.你使副本参考,但不是的对象.
所以你最终得到了1个对象和许多引用.
你或许应该让第一循环中此对象的复制/克隆,并指定副本每个下载的情况下,这将使所有对象截然不同,改变一个不会改变的人.
但是现在,你只是改变了你拥有的一个对象,这使得你看起来像是在改变它们.