列表中的数组双变化值c#

时间:2014-08-16 14:03:09

标签: c# .net

当我重新计算用于输入列表中的值的变量时,我无法理解为什么列表的值会发生变化。

看一个例子。

List<double[]> myList = new List<double[]>();
double[] a = new double[3];

a[0] = 1;
a[1] = 2;
a[2] = 3;
myList.Add(a); // Ok List[1] = 1 2 3

a[0] = 4;      // List[1] = 4 2 3
a[1] = 5;      // List[1] = 4 5 3
a[2] = 6;      // List[1] = 4 5 6
myList.Add(a); // List[1] = 4 5 6 and List[2] = 4 5 6

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:6)

double[]类型是引用类型 - What is the difference between a reference type and value type in c#?。因此,当您将它添加到List两次时,实际上会添加两次相同的数组。

a[0]之前

myList.Add(a);之后将更改相同的数组 - List.Add方法不会创建您提供给它的值的副本。

每次都应该使用新数组或复制它:

List<double[]> myList = new List<double[]>();
double[] a = new double[3];

a[0] = 1;
a[1] = 2;
a[2] = 3;
myList.Add(a); // Ok List[0] = 1 2 3

a = new double[3];
a[0] = 4;      // List[0] = 4 2 3
a[1] = 5;      // List[0] = 4 5 3
a[2] = 6;      // List[0] = 4 5 6
myList.Add(a); // List[0] = 1 2 3 and List[1] = 4 5 6