0

List内にあるオブジェクトがありますList

public List<List<MyObject>> Grid { get; set; }

私がそうするとき、私は時々それに気づきました:

Grid[currentShape.ColumnNumber].Remove(currentShape);

配列から 2 つのオブジェクトを削除します。

オブジェクトにデータを入力するGrid方法は、特定の条件が満たされた場合、基本的に次のようにします。

Grid[newShape.ColumnNumber].Add(newShape);
currentShape = newShape;

currentShape画面上のオブジェクトを移動するために使用するクラス変数です。私が時々行う.Remove()と、配列から複数のオブジェクトが削除されるのは参照型のためですか? .Remove()何とか拡張する必要がありますか?

どんな助けでも大歓迎です。

更新- メソッド全体:

    public void MoveIfPossible(MoveDirection direction)
    {
        List<Shape> neighbouringShapes = new List<Shape>();

        switch (direction)
        {
            case MoveDirection.Right:
                if (currentShape.ColumnNumber == utilities.columns.Count - 1)
                    return;

                neighbouringShapes = GetNeighbouringShapes(currentShape.ColumnNumber);

                foreach (var s in neighbouringShapes)
                {
                    if (currentShape.Position.X + 1 < s.Position.X && currentShape.Position.Y + currentShape.Texture.Height >= s.Position.Y)
                    {
                        return;
                    }
                }
                world.Grid[currentShape.ColumnNumber].Remove(currentShape);
                world.Grid[currentShape.ColumnNumber + 1].Add(currentShape);

                currentShape.Position.X = utilities.columns[currentShape.ColumnNumber + 1].X;
                currentShape.ColumnNumber++;

                currentShape.Coordinate.X = currentShape.ColumnNumber;
                currentShape.Coordinate.Y = world.Grid[currentShape.ColumnNumber].Count - 1;
                break;

            case MoveDirection.Left:
                if (currentShape.ColumnNumber == 0)
                    return;

                neighbouringShapes = GetNeighbouringShapes(currentShape.ColumnNumber - 1);

                foreach (var s in neighbouringShapes)
                {
                    if (currentShape.Position.X - 1 > s.Position.X && currentShape.Position.Y + currentShape.Texture.Height >= s.Position.Y)
                    {
                        return;
                    }
                }
                world.Grid[currentShape.ColumnNumber].Remove(currentShape);
                world.Grid[currentShape.ColumnNumber - 1].Add(currentShape);

                currentShape.Position.X = utilities.columns[currentShape.ColumnNumber - 1].X;
                currentShape.ColumnNumber--;

                currentShape.Coordinate.X = currentShape.ColumnNumber;
                currentShape.Coordinate.Y = world.Grid[currentShape.ColumnNumber].Count;
                break;
        }
    }
4

0 に答える 0