【发布时间】:2020-04-12 02:07:19
【问题描述】:
在查看一些布尔数组和整数后,我有一个返回 true 或 false 的布尔值。
if (CheckForRoute(VertWallAbove, HoriWallLeft, NewWallX, NewWallY, NewWallHor))
在此函数期间,来自 HoriWallLeft 的参数将其 value[0,0] 设置为 true(在此之前,数组中的每个值都是 false,我已经检查过断点是否发生这种情况)。退出函数后,HoriWallLeft[0,0] 的值立即为真,我原以为只有在我经过 ref 时才会发生这种情况。
编辑: 这是我的意思的一个例子
static void Main(string[] args)
{
bool[] Test = new bool[] { false, false, false, false };
ExampleFunction(Test);
if(Test[0])
{
Console.WriteLine("A");
}
else
{
Console.WriteLine("B");
}
Console.ReadLine();
}
static bool ExampleFunction(bool[] TestArray)
{
TestArray[0] = true;
return true;
}
我希望这会输出 B,但它会输出 A
【问题讨论】:
-
所以,你基本上是在传递一个指向布尔数组的指针。这就是您可以修改单个元素的原因。
-
数组是引用类型。对一个引用执行任何操作都会反映在对同一数组实例的所有其他引用中。
-
数组是一种引用类型,因此对 TestArray[0] 的修改实际上应用于它所引用的数组对象。
-
@LittleSweetSeas - 您的评论具有误导性。除非使用
ref关键字,否则 bool[] 不会通过引用传递。在示例代码中,它是按值传递的。