Вы постепенно получаете все переменные, ссылающиеся на один и тот же массив (value
), с любыми значениями, записанными в этот массив в ходе последней установленной итерации.
Существует очень похожий способ написание этого кода, позволяющего избежать проблемы:
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;
foreach (string item in items)
{
if (item == "apple")
value = markets;
else if (item == "banana")
value = streets;
else if (item == "pineapple")
value = county;
else
value = city;
for (int i = 0; i <= 3; i++)
{
if (item == "apple")
value[i] = (2 * i).ToString();
else
value[i] = i.ToString();
}
}
MessageBox.Show("test");
}
Теперь каждый раз, когда через l oop value
присваивается ссылка на другой массив 1 и поэтому for
l oop не перезаписывает свои предыдущие усилия.
1 Предполагая, что items
не содержит ни повторяющихся элементов, ни более одного не яблоки, бананы или ананасы.