c#中数组的双值修改

本文关键字:修改 数组 | 更新日期: 2023-09-27 18:18:11

我不明白为什么当我重新计算用于在列表中输入值的变量时,列表的值发生了变化。

看一个例子。

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

有人能帮帮我吗?

c#中数组的双值修改

double[]类型是引用类型-在c#中引用类型和值类型有什么区别?所以,当你把它添加到List中两次时你实际上是把同一个数组添加了两次。

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

你应该每次都使用new array或者复制它:

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