如何在C#中交换存储在二维列表中的两个对象?

时间:2019-01-16 23:52:15

标签: c# unity3d

我有一个像这样的二维列表:

public List<List<Tile>> a = new List<List<Tile>>();

这些元素显示在屏幕上,并且可以由用户交换。我想做的就是交换这些元素,以便列表在交换后指向正确的元素。 我尝试执行其他帖子建议的简单临时变量交换,但这似乎无法使其正常工作:

Tile auxFirst = a[movedTile1.y][movedTile1.x];
a[movedTile1.y][movedTile1.x] = a[movedTile2.y][movedTile2.x];
a[movedTile2.y][movedTile2.x] = auxFirst;

我主要使用C ++,所以我想我不完全理解引用在C#中的工作方式。我尝试将这个问题视为交换两个指针,但是我可能是错的。 有什么办法可以交换2个列表项? 如果我采用错误的方法,请告诉我并帮助我修改代码。

1 个答案:

答案 0 :(得分:1)

原来,交换是正确的,但是我忘记交换参考图块内部的位置坐标,因此,当我单击交换的图块之一时,它将选择另一个。 另外,我编写的用于检查图块的功能不完整,因此我对其进行了修复。 这是我交换列表中的元素之前添加的位:

coordinates auxPos = movedTile1;
a[movedTile1.y][movedTile1.x].setPosition(movedTile2.x, movedTile2.y);
a[movedTile2.y][movedTile2.x].setPosition(auxPos.x, auxPos.y);