我目前正在製作一個遊戲,其中背景由二維數組的瓷磚表示。平鋪是一個相對簡單的類,它包含圖形和可移動性信息。在我的代碼,我多麼希望自己做類似的東西往往如下:對二維數組中的每個元素執行操作
for (int x = 0; x < TileMap.GetLength(0); x++)
{
for (int y = 0; y < TileMap.GetLength(1); y++)
{
// do something
}
}
顯然有更好的方式來做到這一點,對不對?我想,也許我可以創建需要的是迭代的操作參數,通過陣列,並執行指定的動作每個瓷磚,像這樣的擴展方法:
public static void PerformAction(this Tile[,] tileMap, Action<Tile> action)
{
for (int x = 0; x < tileMap.GetLength(0); x++)
{
for (int y = 0; y < tileMap.GetLength(1); y++)
{
action(tileMap[x, y]);
}
}
}
,然後用它像這樣(只是一個例子) :
TileMap.PerformAction(t => t = new Tile());
雖然這不起作用。我可以在擴展方法或lambda表達式中設置斷點,並觀察它在每次迭代中的命中,但TileMap中的實際Tile仍保持不變。對於上面的示例,如果之前爲空,則所有Tiles仍然爲空。難道我做錯了什麼?有沒有更好的方式去做我想做的事情?
你只是修改參數的值。如果您希望能夠修改實際參考,則需要添加'ref'修飾符。 –