C#结构体初始化原理及二维数组相关技术疑问咨询
嘿,我来帮你把这些C#数组相关的知识点掰明白,毕竟游戏开发里多维数组是存地图这类网格数据的常用手段,咱们一个个问题来:
问题1:
[,] 到底代表什么? 这是C#里的二维数组(也叫矩形数组),和咱们平时见的一维数组[](比如int[] numbers)不一样,它是行列组成的网格结构——就像你游戏里的地图,x轴对应列,y轴对应行,每个Tile[x, y]就能直接定位到地图上某个坐标的tile数据。你的TileStruct[,] Tile就是用来存储整个地图所有tile信息的容器。
问题2:关于初始化代码
Tile = new TileStruct[(byteValue), (byteValue)] 的两个子问题 子问题1:为啥要传两个值?这些值作用在哪?
这两个byteValue分别用来指定二维数组的列数(宽度)和行数(高度)。举个例子,如果byteValue是32,那你就是创建了一个32列×32行的网格,总共1024个TileStruct元素——刚好对应一个32x32的tile地图。
第一个值对应数组的「第一维度」(可以理解为地图的横向格子数),第二个值对应「第二维度」(纵向格子数)。CLR会根据这两个值分配足够的内存,每个位置都会默认初始化一个TileStruct实例(值类型的struct会把内部字段设为默认值:比如Type是0,Data是0,Layer数组是null之类的)。
子问题2:为啥要把值放在括号里?
这是C#创建数组实例的规定语法:new 数组类型[维度大小]。括号里的数字是用来告诉编译器「这个维度需要多少个元素」,对于二维数组,多个维度的大小就用逗号分隔放在同一个括号里。简单说就是用这种语法明确告诉程序:我要一个多大的网格容器来装我的tile数据。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

