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

当我尝试这样做时……

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

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

不知道大小不是问题:

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

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

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

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

您可以使用普通for循环。