实际上,只有第一个阵列已创建并可供使用。其他人只是声明为数组(或部分创建)。
Dim numbers(4) As Integer
Dim sales()() As Double = New Double(11)() {}
智能感知显示,numbers
就可以使用了。对于锯齿阵列sales
- 一个数组数组,代码迄今只是告诉它它将容纳多少个数组。每个那些是Nothing
因为代码还没有创建或分配的一个到任何时隙:
行声明sales
实际上做两件事情,其可能会造成混淆。它可能是这样声明的:
' at some point I will want an array of array of doubles named sales:
Dim sales()() As Double
' Ok, I need it to hold 12 double arrays:
sales = New Double(11)() {}
第一步声明变量和类型。第2步通过创建临时数组并分配它来定义“容器数组”。 (该链接试图用inquiriesByYearMonthDay
来说明 - 它在前面的块中声明)。
销售仍然没有准备好使用,它只是一堆Nothing
。
' Ok, I need the first array to hold 5 elements
sales(0) = New Double(4) {} ' 0 based, so 4 == 5 items
sales(0)(0) = 12.67 ' FINALLY we can use it
现在,sales(0)(0 thru 4)
可以存储数据。 sales(1)()
,其余的未被初始化。
New
并不直接作用于sales
。它正在创建一个新的临时阵列(右侧),该阵列立即分配给左侧的sales()
插槽。
关键是:数组已准备好在给定大小时使用。因此,这些在功能上是相同的:
' create int array with 5 slots:
Dim numbers(4) As Integer
' declare array; assign empty 4 slot int array to it:
Dim numbers() As Int32 = New Int32(4) {}
第一个声明包括大小;第二个分配一个指定大小的(新)临时数组给它。这就是说,VB可以推断出尺寸:
昏暗才对作为字符串()= { “鳕鱼”, “鲑鱼”, “金枪鱼”, “导频”, “梭鱼”}
的{...}
是另一温度数组,VB分配给'鱼'。
但是数组只是笨重。 sales(6,3)
代表什么?为了使它们可读,你需要常量:foo = sales(SALES_MARCH, SALES_ZIGGY)
。就个人而言,我认为唯一的好数组是一个静态数组与已知的固定值:
Dim Days As String() = {"sun", "mon", "tues"....}
否则,List(Of T)
,Dictionary(TK, TV)
,Collection(Of T)
和许多其他许多人更容易使用,创建,管理和使用工作,(它们的大小他们自己!)
欢迎来到编程世界,其中(总是)多种方式来做事情。你选择一个适合你的风格。 :) – Neolisk