gpt4 book ai didi

C# foreach 循环中的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 09:33:21 26 4
gpt4 key购买 nike

经过一天的故障排除后,我设法将问题浓缩为这一小段代码。有人可以向我解释为什么这不起作用吗?当显示消息框时,我希望 [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] 被覆盖。这是为什么?我在这里做错了什么? [市场] 不应在香蕉击中后再次赋值,对吗?

最佳答案

您逐渐结束所有引用同一数组( 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");
}

现在,每次通过循环 value获得对不同 array1 的引用,因此 for loop 不会覆盖它之前的努力。

1假设 items不包含任何重复的项目,也不包含超过一个非苹果、香蕉或菠萝的项目。

关于C# foreach 循环中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com