在创建数组时何时需要使用`New`关键字?

时间:2016-01-25 22:25:40

标签: vb.net

我只是在VB中查看数组的help页面,显然所有这些都是创建数组的可接受语法:

Dim numbers(4) As Integer 

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

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

请注意,第一个关键字甚至没有New个关键字,第二个关键字只有New关键字,第三个关键字同时使用Dim和{{1关键字。为什么会有这么多的不一致,你应该使用哪一个?我对第一个问题最感兴趣,因为数组对象永远不会被创建

2 个答案:

答案 0 :(得分:3)

实际上,只创建了第一个阵列并准备使用。其他只是声明为数组(或部分创建)。

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

正如Intellisense所示,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可以推断出尺寸:

Dim fishes As String()= {“cod”,“salmon”,“tuna”,“perch”,“barracuda”}

{...}是另一个临时数组,VB将其分配给'fishes'。

但阵列只是笨重。 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)以及许多其他人更容易使用,创建,管理和使用(他们自己规模!)

答案 1 :(得分:0)

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