在一整天的故障排除后,我已经将问题压缩到了这段微小的代码中。有人能解释一下为什么它不起作用吗?当消息框出现时,我期望[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。但是,如果我逐步执行代码,似乎第二次执行foreach循环时,[markets]被覆盖了。为什么会这样?我做错了什么?一旦banana已经命中,[markets]不应再被分配值吧?
value
的数组,您不断覆盖它,并逐渐将其他变量的引用分配给这个相同的数组。 - Damien_The_Unbelievermarkets = value
将两个引用设置为同一个数组 - 由于您正在为values
数组分配不同的值,自然可以看到这些更改反映在使用数组的任何引用上。 - Zohar Peled