Ссылка, где не должно быть - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть класс под названием Board.Он имеет несколько столбцов, и вы можете добавить камни в столбец, вызвав AddStoneToColumn (столбец c).Метод не должен модифицировать объект itselft, а только создать новый объект Board с добавленным камнем, но каким-то образом он тоже сам меняется.

Вот мой соответствующий код:

public Board AddStoneToColumn(int column)
{
    Board resultBoard = new Board(this);
    Boolean isPlaced = false;
    for (int i = 0; i < height; i++)
    {
        if (resultBoard.GetStone(column, i) == StoneEnum.EMPTY)
        {
            resultBoard.SetExactCoords(column, i, turn);
            isPlaced = true;
            break;
        }
    }

    if (!isPlaced)
    {
        throw new InvalidOperationException("Spalte voll");
    }

    if (turn == StoneEnum.BLUE)
        resultBoard.turn = StoneEnum.RED;
    if (turn == StoneEnum.RED)
        resultBoard.turn = StoneEnum.BLUE;
    return resultBoard;
}

private void SetExactCoords(int x, int y, StoneEnum stone)
{
    if (stone == StoneEnum.EMPTY)
        throw new NotSupportedException("Empty stone ??");
    this.stones[x, y] = stone;
}

public Board(Board board)
{
    this.stones = board.stones;
    this.turn = board.turn;
}

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Может быть, вы можете использовать структуру вместо класса?

Но для вашего примера я бы использовал ICloneable Интерфейс.

Также вы можете посмотреть это обсуждение тоже.

0 голосов
/ 22 февраля 2019

Вы копируете только ссылки в своем конструкторе клонирования, но не копируете данные.Вам придется дублировать эти массивы / коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...