これをやろうとすると...
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
クラス値を割り当てることです。
さて、これでaimがわかったので、それを達成しようとしていた方法ではなく、foreach
ループを使用しないでください。 foreach
は約readingコレクションのアイテムです-コレクションの内容は変更しません。 C#コンパイラーが反復変数を読み取り専用にすることは良い仕事です。それ以外の場合は、実際にコレクションを変更せずにvariableの値を変更できます。 (変更を反映させるには、もっと重要な変更が必要です...)
私はあなたがただ望んでいると思います:
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] = ...
}
}
配列を初期化しようとしているようです。 この方法ではできません。代わりに、配列をインデックスでループする必要があります。
指定された2次元配列の要素を初期化するには、次のことを試してください。
for (int d = 0; d < array.GetLength(0); d++)
{
for (int i = 0; i < array.GetLength(1); i++)
{
array[d, i] = new Item();
}
}
通常のforループを使用できます。