C# 当我对锯齿数组副本的子数组进行排序时,为什么锯齿数组的子数组会被排序?

C# 当我对锯齿数组副本的子数组进行排序时,为什么锯齿数组的子数组会被排序?,c#,arrays,sorting,jagged-arrays,C#,Arrays,Sorting,Jagged Arrays,我有下面的锯齿状数组- int[][]三角形= { 新的int[]{3}, 新int[]{7,4}, 新的int[]{2,4,6}, 新int[]{8,5,9,3} }; 然后我复制了一份- int[][]临时三角形=新int[triangle.Length][]; 数组.Copytriangle,temporaryTriangle,triangle.Length; 我对副本的子数组进行了排序- 对于int i=0;i

我有下面的锯齿状数组-

int[][]三角形= { 新的int[]{3}, 新int[]{7,4}, 新的int[]{2,4,6}, 新int[]{8,5,9,3} }; 然后我复制了一份-

int[][]临时三角形=新int[triangle.Length][]; 数组.Copytriangle,temporaryTriangle,triangle.Length; 我对副本的子数组进行了排序-

对于int i=0;i<时间三角形长度;我++ { 数组.SorttemporaryTriangle[i]; } 我发现源数组的子数组也已排序! 我的问题是为什么会发生这种情况,我的意思是,当我对副本的子数组进行排序时,为什么数组的子数组会被排序

用法:

三角形中的foreach-var子阵 Console.WriteLinestring.Join,子数组; 时间三角形中的foreach-var子阵 Console.WriteLinestring.Join,子数组; //输出: // 3 // 4 7 // 2 4 6 // 3 5 8 9 // 3 // 4 7 // 2 4 6 // 3 5 8 9
我问的是什么问题,而不是如何解决。所以没有回答我的问题。

虽然你认为你复制了一个数组,实际上你是这样做的,但是你只深度复制了外部数组,每个元素都被一个引用复制了。您应该循环新数组,并将上一个数组的每个元素深度复制到其中。

似乎您没有复制子数组元素,而是只复制三角形内每个数组的引用。您可以使用此代码进行确认

对于int i=0;i<三角形长度;我++ { var结果=参考等式三角形[i],时间三角形[i]; }
对于每次迭代,它都返回true。因此,在您的情况下,您应该手动复制每个元素

复制时,只复制引用/指针,而不复制实际数组本身

您还必须复制内部数组。

数组。复制仅复制单元格数组的第一级,即对child数组的引用数组。。。因此,只有这些引用是重复的

因此,作为重复问题提供的链接通过对每个子叶进行深度复制来解决问题

您需要克隆每个子阵列,依此类推:如果您有一个[][]。。。锯齿阵列您需要逐个分支管理树的每个级别,以使用阵列复制每个级别。使用另一个阵列复制到叶。复制

因此,如果仅复制第一层,然后使用temporaryTriangle修改叶,则读取三角形会导致从相同的单元格中获取值


事实上,只有temporaryTriangle和triangle的参考值内存地址是不同的:所有其他参考和内容都在这些变量之间共享。

这是否回答了您的问题@我的问题是为什么会发生这种情况,而不是如何解决。