我有一个二维数组,即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();
答案 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
的数组,它是一个引用类型。因此,SubState
和State
都引用相同的数组,这就是为什么两个元素都反映了对它们的任何元素的更改的原因。要解决此问题,您可以创建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)
所以你不是简单地指定一个新的引用,而是实际上正确地复制数组