为什么更改一个数组会改变C#中的另一个数组?
我有一个二维数组,即C#中的状态。 我从各州建立一个一维数组,即SubState。 当我改变SubState时,状态也会改变。 我希望各国不变。 谢谢
int[] SubState = State [0]; SubState[0]-=1; //State[0][0] is also changed here
在我看来,你的国家定义是:
int[][] State;
Array是一种引用类型,当您从State数组复制元素时,您将从第一个列表中获取对该数组的引用,并且这两个引用都映射到相同的int []数组。 因此,当您更改存储在SubArray中的数组时,您可以使用指向同一数组的链接。
简单的修复是源数组的副本
var SubState = State[0].ToArray();
那是因为当您分配数组时,您传递了它的引用,而不是复制它。 查看数组复制方法上的msdn链接https://msdn.microsoft.com/en-us/library/System.Array.Copy(v=vs.110).aspx
int[] SubState = State [0];
只是对state
数组的另一个引用,因此也可以通过它进行更改。
您可能想要做的是从state
数组创建一个单独的数组
int[] substate = new int[state.GetLength(0)]; state.CopyTo(substate, 0);
您没有构建新的一维数组。 您只是创建对二维数组的第一行的新引用。 如果您确实想要构建一个新的一维数组,则必须迭代地复制二维数组的第一行。
尝试:
int[] SubState = new int[States[0].length]; States[0].CopyTo(SubState, 0);
代替
int[] SubState = State [0];
尝试
int[] SubState = new int[State[0].Length]; Array.Copy(State[0],Substate, Substate.Length)
所以你不是简单地分配一个新的引用,而是实际上正确地复制数组
显然, State
位置0处的元素是一个int
数组,它是一个引用类型。 因此, SubState
和State
引用相同的数组,这就是为什么两个元素都会反映对它们的任何元素的更改。 要解决此问题,您可以创建State
SubState
副本并将其值复制到SubState
:
States.CopyTo(SubStates, 0);
编辑:Thius假设SubStates
已经初始化为与States
相同的大小。 例如:
上述就是C#学习教程:为什么更改一个数组会改变C#中的另一个数组?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
int[] SubStates = new int[States[0].Length];
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027196.html