繁体   English   中英

奇怪的 C# 行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM