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

时间:2015-07-24 06:14:38

标签: c# list

我已经阅读了类似问题的所有答案,并尝试了一系列不同的排列,但没有任何接缝可以工作!我花了最后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++;
        }

2 个答案:

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