我只是在VB中查看数组的help页面,显然所有这些都是创建数组的可接受语法:
Dim numbers(4) As Integer
inquiriesByYearMonthDay = New Byte(20)()() {}
Dim sales()() As Double = New Double(11)() {}
请注意,第一个关键字甚至没有New
个关键字,第二个关键字只有New
关键字,第三个关键字同时使用Dim
和{{1关键字。为什么会有这么多的不一致,你应该使用哪一个?我对第一个问题最感兴趣,因为数组对象永远不会被创建
答案 0 :(得分:3)
实际上,只创建了第一个阵列并准备使用。其他只是声明为数组(或部分创建)。
Dim numbers(4) As Integer
Dim sales()() As Double = New Double(11)() {}
正如Intellisense所示,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可以推断出尺寸:
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。您可能还想查看字符串列表