当前位置: 首页 > 编程语言 > C#

为什么在C#中更改一个数组会更改另一个数组?分享

时间:2023-04-10 12:31:50 C#

为什么在C#中改变一个数组会改变另一个数组?我有一个二维数组,C#中的状态。我从状态SubState构建一维数组。当我更改SubState时,状态也会更改。我希望各国保持不变。谢谢int[]SubState=State[0];子状态[0]-=1;//State[0][0]这里也改了在我看来你的state定义是:int[][]State;Array是一种引用类型,当您从State数组复制一个元素时,您会从第一个列表中获得对该数组的引用,并且这两个引用都映射到同一个int[]数组。因此,当您更改存储在SubArray中的数组时,您可以使用指向同一数组的链接。简单的解决方法是复制源数组varSubState=State[0].ToArray();那是因为当你分配数组时,你传递的是对它的引用,而不是复制它。查看数组复制方法上的msdn链接https://msdn.microsoft.com/en-us/library/System.Array.Copy(v=vs.110).aspxint[]SubState=State[0];恰到好处对状态数组的另一个引用,因此也可以通过它进行更改。您可能想要做的是从状态数组创建一个单独的数组int[]substate=newint[state.GetLength(0)];state.CopyTo(substate,0);您不是在构建新的一维数组。您只是创建了对二维数组第一行的新引用。如果你真的想建立一个新的一维数组,你必须迭代复制二维数组的第一行。尝试:int[]SubState=newint[States[0].length];状态[0].CopyTo(SubState,0);而不是int[]SubState=State[0];尝试int[]SubState=newint[State[0].Length];Array.Copy(State[0],Substate,Substate.Length)因此,您实际上不是简单地分配一个新引用,而是正确地复制数组。很明显,State的0位置的元素是一个int数组,是一个引用类型。因此,SubState和State引用同一个数组,这就是为什么这两个元素都反映了对其任何元素的更改。要解决此问题,您可以创建StateSubState的副本并将其值复制到SubState:States.CopyTo(SubStates,0);编辑:Thius假设SubStates已经初始化为与States相同的大小。例如:以上是C#学习教程:C#中改变一个数组为什么会改变另一个数组?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——int[]SubStates=newint[States[0].Length];本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: