如何从foreach循环中修改foreach迭代变量?

时间:2012-08-04 17:55:38

标签: c# foreach iteration variable-assignment

当我尝试这样做时......

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类值分配给现有项目。

4 个答案:

答案 0 :(得分:20)

好的,既然我们知道你的目标而不是你想要实现它的方式,那么回答你的问题要容易得多:你不应该使用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();
    }
}

答案 1 :(得分:6)

不知道尺寸不是问题:

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

答案 2 :(得分:2)

看起来你正在尝试初始化数组。 你不能这样做。相反,您需要通过索引遍历数组。

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

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

答案 3 :(得分:0)

你可以使用普通for循环。