c# List.Add()不断更新我所有的条目,而不是添加新的

本文关键字:添加 Add List 更新 | 更新日期: 2023-09-27 18:04:29

我已经阅读了所有类似问题的答案,并尝试了一堆不同的排列,但没有一个看起来有效!我花了4-5个小时试着绕过去,结果还是一样。请帮助!

这是我的问题代码:我需要在每次迭代时将cruMatrix的内容复制到cruMatric_tm1中。我把我尝试过的一些东西注释掉了

while (true)
        {
            //cruMatrix = new List<double[]>();
            //cruMatrix = cruMatrix_tm1.ToList();
            T1 = new Thread(updateCaConcentration); T1.Start(); T1.Join();
            T2 = new Thread(updateSystemState); T2.Start(); T2.Join();

            //cruMatrix_tm1.Clear();
            systemUpdate();
            plotOpenVsTime(ref time); 
            //cruMatrix_tm1 = new List<double[]>(cruMatrix);
            cruMatrix_tm1 = new List<double[]>();
            foreach(double[] arr in cruMatrix){
                cruMatrix_tm1.Add(arr);
            }
            run++;
            if (run > runUntil) break;
            time++;
        }

c# List.Add()不断更新我所有的条目,而不是添加新的

double[]是引用类型。当您将数组从一个列表添加到另一个列表时,您添加了对相同数组的引用。对数组所做的任何修改都会反映在两个列表中。你要做的是创建一个新的数组并使用array之类的东西。复制如下:

cruMatrix_tm1 = new List<double[]>();
foreach(double[] arr in cruMatrix){
    double[] copy = new double[arr.Length];
    Array.Copy(arr,copy,arr.Length);
    cruMatrix_tm1.Add(copy);
}

在循环中为cruMatrix_tm1创建一个新的List,这就是为什么cruMatrix_tm1总是具有相同的元素。

//put it outside the loop
cruMatrix_tm1 = new List<double[]>();
while (true)
        {
            T1 = new Thread(updateCaConcentration); T1.Start(); T1.Join();
            T2 = new Thread(updateSystemState); T2.Start(); T2.Join();
            systemUpdate();
            plotOpenVsTime(ref time); 
            foreach(double[] arr in cruMatrix){
                cruMatrix_tm1.Add(arr);
            }
            run++;
            if (run > runUntil) break;
            time++;
        }