[英]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.