2016-01-25 115 views
1

我只是在看help页在VB中数组,显然所有的这些都为创建阵列可以接受的语法:创建数组时,何时需要使用`New`关键字?

Dim numbers(4) As Integer 

inquiriesByYearMonthDay = New Byte(20)()() {} 

Dim sales()() As Double = New Double(11)() {} 

注意,第一个甚至没有一个New关键词,第二个只有New关键字,第三个关键字使用DimNew。为什么有这么多的不一致,你应该使用哪一个?我很好奇第一个,因为数组对象甚至从未被创建

+0

欢迎来到编程世界,其中(总是)多种方式来做事情。你选择一个适合你的风格。 :) – Neolisk

回答

2

实际上,只有第一个阵列已创建并可供使用。其他人只是声明为数组(或部分创建)。

Dim numbers(4) As Integer 
Dim sales()() As Double = New Double(11)() {} 

智能感知显示,numbers就可以使用了。对于锯齿阵列sales - 一个数组数组,代码迄今只是告诉它它将容纳多少个数组。每个那些是Nothing因为代码还没有创建或分配的一个到任何时隙:

enter image description here

行声明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)和许多其他许多人更容易使用,创建,管理和使用工作,(它们的大小他们自己!)

0

是的,他们是,但是如果你说有数组,在子例程中使用new,并且希望它清空你的下一次运行trhough 。您可能还想查看字符串列表

相关问题