c#:当我初始化像这样的bool数组时会发生什么

时间:2016-01-20 16:52:34

标签: c# arrays initialization boolean

我进入C#并且有点困惑about an example of the resource im learning from.关于bool数组的声明和初始化,id想知道在代码中的什么点发生了什么:

    bool[][] myBools = new bool[2][];
    myBools[0] = new bool[2];
    myBools[1] = new bool[1];

    myBools[0][0] = true;
    //myBools[0][1] = false;
    myBools[1][0] = true;
    Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0], myBools[1][0]);

我声明了一个未知大小的二维bool数组 - 在同一行中,我使用2个布尔数组初始化数组数组。

阵列中的那一刻我有什么? C#不允许读出值。 (我想我现在有一个包含2个成员的array_main包含未初始化的!bool arrays_members这是正确的吗?所以包含2个成员的len 2数组是包含NULL的未知长度的bool数组?)

在第2行和第3行中,我使用布尔数组初始化array_members,第一个成员使用lenght 2,第二个成员使用lenght 1.这是正确的吗?

之后很简单,C就好。

我可以使用逻辑,但我想了解幕后发生的事情。

1 个答案:

答案 0 :(得分:4)

  

我声明了一个未知大小的二维bool数组

好吧,你声明了一个数组数组。它不是一个“真正的”多维数组 - 即bool[,] myBools。值得理解锯齿状数组(元素类型是另一种数组类型的数组)和矩形数组(其中有一个数组对象,但有多个维度)之间的区别。

  

阵列中那时我有什么?

您有两个空引用。这很容易看出:

bool[][] myBools = new bool[2][];
bool[] array = myBools[0];
Console.WriteLine(array == null); // true

基本上,您只是创建一个元素类型为引用类型的数组。可以把它想象成你有一个名为BoolArray的类,你创建了:

BoolArray[] myBools = new BoolArray[2];

然后你希望两个元素的值都为null,因为这是所有引用类型的默认值,对吧?嗯,这正是你得到的......只是数组类型是bool[]而不是简单的类。

  

在第2行和第3行中,我使用布尔数组初始化array_members,第一个成员长度为2,第二个成员长度为1.这是正确的吗?

是的,确实。

相关问题