我已经阅读了类似问题的所有答案,并尝试了一系列不同的排列,但没有任何接缝可以工作!我花了最后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++;
}
答案 0 :(得分:0)
double []是引用类型。将数组从一个列表添加到另一个列表时,添加对相同数组的引用。对阵列所做的任何修改都将反映在两个列表中。 你想要做的是创建一个新的数组并使用像Array.Copy这样的东西:
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);
}
答案 1 :(得分:0)
你一直在循环中为cruMatrix_tm1创建一个新的列表,这就是为什么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++;
}