2016-01-25 119 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 。您可能還想查看字符串列表

相關問題