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++;
}
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++;
}