[英]Weird C# behaviour
我不知道如何描述这个问题,但我的问题是,我的函数“探路者”以某种方式改变了我的 int[,] 矩阵的数据。 有没有办法在不改变我的探路者功能的情况下防止这种情况发生?
我的一些代码:
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);
我得到了我想要的控制台输出:
20
20
21
21
22
22
但是有了这个功能,我得到了这个输出:
20
20
21
41
42
42
我知道这与 c# 中函数的行为有关,但我不知道它是什么以及如何防止它。 请帮我 (;
从你得到的输出来看AStarPathfinding.Pathfinder
确实在改变矩阵。 这只是方法可以对引用类型或使用ref
修饰符传递的值类型执行的操作。 这是因为那些参数是通过引用传递的,所以被调用者和调用者实际上是在处理同一个对象。 有些方法会这样做,有些方法不会,而AStarPathfinding.Pathfinder
恰好是前者之一。
听起来你不能改变实现,所以你能做的最好的事情就是传递矩阵的副本。 一种方法是:
AStarPathfinding.Pathfinder((int[,])matrix.Clone(), playerCords, range, target, path, targets, z);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.