如何从foreach循环中修改一个foreach迭代变量?(How to modify a fore

2019-06-26 17:59发布

当我试图做到这一点...

Item[,] array = new Item[w, h];  // Two dimensional array of class Item, 
                                 //   w, h are unknown at compile time.
foreach(var item in array)
{
    item = new Item();
}

......我得到Cannot assign to 'item' because it is a 'foreach iteration variable'

不过,我想这样做。

我们的想法是分配默认Item类值现有项目。

Answer 1:

好了,现在我们知道你的目标 ,而不是你如何试图去实现它,它更容易回答你的问题:你不应该使用foreach循环。 foreach是有关从收集阅读项目-不改变一个集合的内容。 这是一个很好的工作,在C#编译器对迭代变量只读,否则会有让你改变的变量的值,而不实际改变的集合。 (这里不得不更加显著的改变,以允许反映变化...)

我怀疑你只是想:

for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array.GetLength(1); j++)
    {
        array[i, j] = new Item();
    }
}

这是假设它是一个矩形阵列(一个Item[,] )。 如果它是一个Item[][]那么它是一个数组的数组,你会处理这个略有不同-很可能用foreach的外部循环:

foreach (var subarray in array)
{
    for (int i = 0; i < subarray.Length; i++)
    {
        subarray[i] = new Item();
    }
}


Answer 2:

不知道大小不是问题:

for (int i = 0; i < twoDimArray.GetLength(0); i++)
{
    for (int j = 0; j < twoDimArray.GetLength(1); j++)
    {
        twoDimArray[i, j] = ...
    }
}


Answer 3:

它看起来像你想初始化数组。 你不能这样做,这条路 。 相反,通过索引的阵列需要循环。

要初始化给定的两维数组的元素,尝试:

for (int d = 0; d < array.GetLength(0); d++)
{
    for (int i = 0; i < array.GetLength(1); i++)
    {
        array[d, i] = new Item();
    }
}


Answer 4:

您可以for循环使用正常。



文章来源: How to modify a foreach iteration variable from within foreach loop?