当我尝试这样做时......
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
类值分配给现有项目。
答案 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循环。