Странное C# поведение - PullRequest
       0

Странное C# поведение

0 голосов
/ 11 февраля 2020

Я не знаю, как описать эту проблему, но моя проблема в том, что моя функция «Pathfinder» каким-то образом изменяет данные моей матрицы int [,]. Есть ли способ предотвратить это без изменения функции Pathfinder?

немного моего кода:

int z = 0;
AStarPathfinding = GetComponent<AStarPathfinding>();
foreach (Vector2Int target in targets)
{
    Debug.Log(matrix[0, 1].ToString() + " " + z.ToString());
    AStarPathfinding.Pathfinder(matrix, playerCords, range, target, path, targets, z);
    Debug.Log(matrix[0, 1].ToString() + " " + z.ToString());
    z++;
}

без

AStarPathfinding.Pathfinder(matrix, playerCords, range, target, path, targets, z);

Я получаю вывод консоли I want:

20
20
21
21
22
22

Но с этой функцией я получаю такой вывод:

20
20
21
41
42
42

Я знаю, что это как-то связано с поведением функций в c#, но я не Не знаю, что это такое и как это предотвратить. Пожалуйста, помогите мне (;

1 Ответ

2 голосов
/ 11 февраля 2020

Судя по полученному выводу AStarPathfinding.Pathfinder действительно меняет матрицу. Это то, что методы могут делать для ссылки на типы или типы значений, передаваемые с модификатором ref. Это связано с тем, что эти параметры передаются по ссылке, поэтому вызываемый и вызывающий стороны фактически имеют дело с одним и тем же объектом. Некоторые методы делают это, другие - нет, и AStarPathfinding.Pathfinder просто один из первых.

Похоже, вы не можете изменить реализацию, поэтому лучшее, что вы можете сделать, это передать копию матрицы. Один из способов сделать это:

AStarPathfinding.Pathfinder((int[,])matrix.Clone(), playerCords, range, target, path, targets, z);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...