Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#foreach循环更新集合中的所有对象_C#_List_Dictionary_Foreach - Fatal编程技术网

c#foreach循环更新集合中的所有对象

c#foreach循环更新集合中的所有对象,c#,list,dictionary,foreach,C#,List,Dictionary,Foreach,在下载的Case对象集合上循环。目的是更新sorteddictionary(CSVFullColumnList),它作为每个downloadedCase对象上的属性存在 代码如下: private void generateCSVRows() { foreach (NewCase downloadedCase in downloadedCases) { downloadedCase.CSVFullColumnList = t

在下载的Case对象集合上循环。目的是更新sorteddictionary(CSVFullColumnList),它作为每个downloadedCase对象上的属性存在

代码如下:

    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];
                }
            }
        }
    }
private void generateCSVRows()
{
foreach(新案例下载案例中的案例下载)
{
downloaddedcase.CSVFullColumnList=this.columnsWithNoValuesFinal;
}
字符串columnNameLower;
foreach(新案例下载案例中的案例下载)
{
列表键=新列表(columnsWithNoValues.keys);
foreach(键中的字符串列名称)
{
columnNameLower=columnName.ToLower();
if(下载的case.CSVDataList.ContainsKey(columnNameLower))
{
downloadedCase.CSVFullColumnList[columnNameLower]=downloadedCase.CSVDataList[columnNameLower];
}
}
}
}
但是,当代码到达if语句中的赋值时,将针对所有下载的case对象完成赋值。例如,在第一次迭代中,集合中的第三个对象也会得到更新。此外,columnsWithNoValuesFinal也会得到更新,即使在赋值语句中没有为其赋值


有人能给我解释一下为什么会发生这种情况吗?

您正在使用对象,这些对象被称为“引用类型”,这意味着您有两个方面在起作用:

  • 对象本身
  • 对对象的一个或多个引用
在这种情况下,您有一个对象,最初由
列swithnovaluesFinal
字段/变量引用

然后将此引用分配给每个下载案例的
CSVFullColumnList
属性。您正在复制引用,但不是对象

因此,最终得到1个对象和多个引用

您可能应该在第一个循环中复制/克隆此对象,并将副本分配给每个已下载的案例,这将使所有对象彼此独立,更改其中一个不会更改其他对象


但是现在,你只是改变了你拥有的一个对象,这使它看起来像是你改变了“所有对象”。

你在使用对象,这些对象被称为“引用类型”,这意味着你有两件事要做:

  • 对象本身
  • 对对象的一个或多个引用
在这种情况下,您有一个对象,最初由
列swithnovaluesFinal
字段/变量引用

然后将此引用分配给每个下载案例的
CSVFullColumnList
属性。您正在复制引用,但不是对象

因此,最终得到1个对象和多个引用

您可能应该在第一个循环中复制/克隆此对象,并将副本分配给每个已下载的案例,这将使所有对象彼此独立,更改其中一个不会更改其他对象


但是现在,你只是改变了你拥有的一个对象,这使它看起来像你改变了“所有对象”。

你很可能在所有对象上引用了相同的对象,这意味着你只有一个对象在游戏中。在第一个循环中,您很可能希望克隆分配给每个下载案例的
列novaluesFinal
,以确保每个案例都有自己的副本,可以单独修改。您很可能在所有案例上引用了相同的对象,这意味着您只有一个对象在使用中。在第一个循环中,您很可能希望克隆分配给每个下载案例的
列novaluesFinal
,以确保每个案例都有自己的副本,可以单独修改。