List<int[]> LST = new List<int[]>();
int[] ARY = new int[2];
Random RND = new Random();
for( int i = 0 ; i < 2 ; i++ )
{
ARY[0] = RND.Next( 100, 999 );
ARY[1] = RND.Next( 100, 999 );
LST.Add( ARY );
MessageBox.Show(
LST.Count.ToString() + "\n" +
LST[i][0].ToString() + ", " +
LST[i][1].ToString());
}
foreach ( var x in LST )
MessageBox.Show(
x[0].ToString() + " ," +
x[1].ToString() );
嗨..专家!!
我想拥有;
Foo, Boo
Poo, Voo
但是,我得到了;
Poo, Voo
Poo, Voo
在中间点检查,两者看起来都不错。但是,在最后阶段,我得到了扁平化列表(最后一个重复)。有什么好的解释吗?问候(是的,我发现如果我在 for 循环中移动 ARY 声明,结果会很好。我想知道为什么..)
您只创建了一次数组,然后多次更改其内容并将其添加到列表中。
请注意,List
可以有两个指向同一个对象的项目。这就是你的情况。 LST
列表有两个指向同一个数组的项目。
你可以通过在循环中移动这一行来解决这个问题:
int[] ARY = new int[2];
在检查中间点时,消息框会显示您刚刚设置的数组的当前值。
要清楚地看到这一点,请在调用 MessageBox.Show...
之前在循环的第二次迭代中检查 LST[0]
的值。它将显示新值,而不是旧值。
或者甚至更好,在第二次迭代中,在执行 ARY[0] = RND.Next( 100, 999 );
之后检查 LST[0]
的值但在执行 ARY[1] = RND.Next( 100, 999 );
之前。
我是一名优秀的程序员,十分优秀!