为什么更改一个数组会改变C#中的另一个数组?

时间:2015-08-07 14:32:56

标签: c#

我有一个二维数组,即C#中的状态。我从各州建立一个一维数组,即SubState。当我改变SubState时,状态也会改变。我希望各国不变。感谢

TrustManager[] trustAllCerts = new TrustManager[]{
                  new X509TrustManager() {

                      public java.security.cert.X509Certificate[] getAcceptedIssuers()
                      {
                          return null;
                      }
                      public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
                      {
                          //No need to implement.
                      }
                      public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
                      {
                          //No need to implement.
                      }
                  }
          };


          LdapConnectionConfig connectionConfig = new
                   LdapConnectionConfig();
                               connectionConfig.setLdapHost("XXX");
                               connectionConfig.setLdapPort(636);
                               connectionConfig.setName("XXX");
                               connectionConfig.setCredentials("XXX");
                               connectionConfig.setUseSsl(true);
                               connectionConfig.setSslProtocol("SSLv3");
                            //   connectionConfig.setTrustManagers(trustAllCerts);

                              connection = new LdapNetworkConnection(connectionConfig);


                              connection.bind();

6 个答案:

答案 0 :(得分:2)

在我看来,你的州定义是:

int[][] State;

Array是一种引用类型,当您从State数组中复制元素时,您将从第一个列表中获取对该数组的引用,并且这两个引用都映射到相同的int []数组。因此,当您更改存储在SubArray中的数组时,您可以使用指向同一数组的链接。

简单修复是源数组的副本

var SubState = State[0].ToArray();

答案 1 :(得分:1)

state只是对state数组的另一个引用,因此也可以通过它进行更改。

您可能想要做的是从int[] substate = new int[state.GetLength(0)]; state.CopyTo(substate, 0); 数组创建一个单独的数组,如

5.0.0.alpha

答案 2 :(得分:1)

那是因为当您分配数组时,您传递了它的引用,而不是复制它。查看数组复制方法https://msdn.microsoft.com/en-us/library/System.Array.Copy(v=vs.110).aspx

上的msdn链接

答案 3 :(得分:0)

您没有构建新的一维数组。您只是创建对二维数组的第一行的新引用。如果你真的想要构建一个新的一维数组,你必须迭代地复制你的二维数组的第一行。

尝试:

int[] SubState = new int[States[0].length];
States[0].CopyTo(SubState, 0);

答案 4 :(得分:0)

显然,State位置0的元素是int的数组,它是一个引用类型。因此,SubStateState都引用相同的数组,这就是为什么两个元素都反映了对它们的任何元素的更改的原因。要解决此问题,您可以创建State - 数组的副本,并将其值复制到SubState

States.CopyTo(SubStates, 0);

编辑:Thius假设SubStates已初始化为与States相同的大小。 e.g:

int[] SubStates = new int[States[0].Length];

答案 5 :(得分:0)

而不是

int[] SubState = State [0];

int[] SubState = new int[State[0].Length];
Array.Copy(State[0],Substate, Substate.Length)

所以你不是简单地指定一个新的引用,而是实际上正确地复制数组