[英]Size of array in Visual Basic?
我已經在VB中嘗試了以下代碼:
Dim a(1) As Byte
Console.WriteLine(a.Length)
輸出為“ 2”。 有人知道為什么嗎?
如果習慣於使用C / C ++ / C#語言,則在聲明數組以使用數組中的元素數對其進行初始化時會使用該語言。
C# : byte a[] = new byte[1]
將聲明一個帶有1個元素的字節數組(upperBound = 0)
VB中的行為不同,在VB中,聲明數組時,初始化中使用的參數表示數組的UpperBound 。
VB.NET: Dim a(1) As Byte
將聲明一個包含2個元素的字節數組(upperBound = 1)
在Visual Basic中,使用數組的上限聲明數組的大小,其中大多數語言通過指定數組中元素的數量來聲明數組的大小。 如果您不知道這一點,那么您的Visual Basic數組最終比預期長1個元素:
VB.NET:
Dim a(1) as Byte ' under the hood, translated to byte[2]
Console.WriteLine("{0}", a.Length) ' output 2
a(0) = 7 ' No error, element exists
a(1) = 7 ' No error, element exists, array length is 2
a(a.Length) = 7 ' error: Index was outside the bounds of the array.
C#:
byte[] a = new byte[1];
Console.WriteLine("{0}", a.Length); // output 1
a[0] = 7 // No error, element exists
a[1] = 7 // error: Index was outside of bounds of the array. (because array length is 1)
a[a.Length] = 7; // error: Index was outside the bounds of the array.
Microsoft之所以設計VB.NET以便根據上限而不是數組長度來調整數組大小,是為了使將代碼從VB6移植到VB.NET更加容易。 除非您聲明Option Base 0,否則VB6數組的初始索引為1。通常使用For i = 1 To N
遍歷大小為N的數組。 通過設計VB.NET將數組的大小調整參數解釋為上限而不是數組中元素的數量,可以將循環從1到N的舊VB6代碼直接移植到VB.NET。 與VB6中的數組(索引為0的元素)相比,VB.NET中的數組將具有一個額外的元素,但其行為與VB6中的相同。
有時您會看到人們聲稱Visual Basic創建了一個“浪費”元素。 僅當移植不希望索引索引為0的舊版VB6代碼時才如此。編寫新代碼時,您只需要記住sizing參數的含義(上限,而不是元素計數),並相應地聲明數組即可。 與在C#中看到的相比,只需將大小調整參數減少一個即可。 結果數組將具有從a(0)
到a(a.Length-1)
元素,就像C#數組一樣。
數組從位置0開始。您要定義兩個位置。
如果只想要1個職位,則:
Dim a(0) As Byte
您將獲得a.Length為1。
尺寸長度每個尺寸的索引都是從0開始的,這意味着它的范圍是從0到上限。 因此,給定尺寸的長度比該尺寸的聲明上限大1。
先前的答案每個都有正確答案的一部分,但沒有完整的正確答案。 當您聲明一個數組(如您的代碼:Dim a(1)As Byte)時,您在數組聲明中輸入的數字(在本例中為1)不是數組中有多少個條目的聲明,它是一個聲明數組的上邊界 。
因此,在聲明中,您要創建一個包含2個條目的數組:a(0)和a(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.