【发布时间】:2020-07-12 02:28:44
【问题描述】:
经过一天的故障排除后,我设法将问题浓缩为这一小段代码。有人可以向我解释为什么这不起作用吗?当显示消息框时,我希望 [markets] 为 0 2 4 6,[city] [county] 和 [streets] 为 0 1 2 3。
private void pieceoftestcode()
{
string[] county = new string[4];
string[] city = new string[4];
string[] markets = new string[4];
string[] streets = new string[4];
string[] items = new string[4] { "apple", "banana", "pineapple", "juice" };
string[] value = new string[4];
foreach (string item in items)
{
for (int i = 0; i <= 3; i++)
{
if (item == "apple")
value[i] = (2 * i).ToString();
else
value[i] = i.ToString();
}
if (item == "apple")
markets = value;
else if (item == "banana")
streets = value;
else if (item == "pineapple")
county = value;
else
city = value;
}
MessageBox.Show("test");
}
我正在遍历 foreach 循环中的项目。如果项目是“apple”,那么我希望 [value] 为 0 2 4 6。最初 [markets] 分配为 0 2 4 6。但是,如果我逐步执行代码,似乎第二次foreachloop 被执行,[markets] 被覆盖。这是为什么?我在这里做错了什么? [markets] 不应该在香蕉击中后再次赋值吗?
【问题讨论】:
-
在整个过程中,您只有一个名为
value的数组,您不断地覆盖并逐渐将来自其他变量的引用分配给同一个数组。 -
"但是,如果我一步一步执行代码,似乎第二次执行 foreachloop 时,[markets] 被覆盖了。" 这是因为
markets = value将两个引用都设置为同一个数组 - 由于您为values数组分配了不同的值,因此无论您对数组使用什么引用,您自然可以看到这些更改反映出来。