当我试图做到这一点...
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();
}
}