2

这个问题可能非常基本,但我偶然发现了一行我从未见过的代码,并且想知道方括号的用途是什么。

        public NodeItem (bool isWall, Vector2 pos, int x, int y)
        {
            this.isWall = isWall;
            this.pos = pos;
            this.x = x;
            this.y = y;
        }

1.  private NodeItem[,] map;

2.  map = new NodeItem[width, height];

有人可以向我解释 1 和 2 是如何工作的,这可能有什么好处吗?

4

2 回答 2

3

这不是一个对象。当您使用方括号时,您正在声明一个数组(与 C 和 C++ 不同,您不指定元素的数量。相反,您在初始化数组时使用new语句 ( new <Type>[<itemsNumber>]) 执行此操作)。数组是一组对象,任何对象都应该被初始化- 任何数组元素(数组项的术语)都包含对象的默认值 - 0 表示数字、null引用类型和指针等。但是当你' 声明一个数组,你在内存中保存一个地方来存储数组元素(数组是引用类型,所以它们存储在堆中)。当您在数组声明中使用逗号时,您正在声明一个多维数组. 这是一个矩阵(对于 2D 数组;它可能是 3D、4D 等)。要访问数组元素,请在方括号中指定所有索引,用逗号分隔。

有关 C# 中数组的更多详细信息,请参阅https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/以及有关多维数组 - 请参阅https://docs.microsoft.com/en -us/dotnet/csharp/programming-guide/arrays/多维数组

于 2018-08-19T10:34:31.947 回答
3

在 c# 中,x[]是一个类型为 的数组xx[,]是一个二维数组(自然x[,,]是一个三维数组等等)。

所以 -声明一个名为private NodeItem[,] map;的二维数组的字段。NodeItemmap

之后的行 -map = new NodeItem[width, height];初始化数组 - 因此它现在包含width * height对 的引用NodeItem,所有隐式初始化为default(NodeItem)-null对于引用类型,以及值类型的任何默认值。

进一步阅读,数组(C# 编程指南)多维数组(C# 编程指南)

于 2018-08-19T10:38:23.610 回答