An array is an index-ordered collection of objects. The type of object is defined by the type given in the array declaration.
Arrays in Visual Basic .NET are most commonly (and by default) zero (0) based, meaning that the first index is 0. An array of 10 elements will have an index range of 0-9. When accessing array elements, the maximum accessible index is one less than the total number of elements. Because of this, loops that access array indices incrementally should always do a range check where the value is less than the array length.
All arrays in VB.NET are zero-based. In other words, the index of the first item (the lower bound) in a VB.NET array is always 0. Older versions of VB, such as VB6 and VBA, were one-based by default, but they provided a way to override the default bounds. In those earlier versions of VB, the lower and upper bounds could be explicitly stated (e.g. Dim array(5 To 10). In VB.NET, in order to maintain compatibility with other .NET languages, that flexibility was removed and the lower bound of 0 is now always enforced. However, the To syntax can still be used in VB.NET, which may make the range more explicitly clear. For instance, the following examples are all equivalent to the ones listed above:
Nested Array Declarations
Declare a single-dimension array and set array element values
Jagged Array Initialization
Note the parenthesis to distinguish between a jagged array and a multidimensional array
SubArrays can be of different length
Multidimensional Array initialization
Non-zero lower bounds
With Option Strict On, although the .NET Framework allows the creation of single dimension arrays with non-zero lower bounds they are not "vectors" and so not compatible with VB.NET typed arrays. This means they can only be seen as Array and so cannot use normal array (index) references.
As well as by using Option Strict Off, you can get the (index) syntax back by treating the array as an IList, but then it's not an array, so you can't use LBound and UBound on that variable name (and you're still not avoiding boxing):
Multi-dimensional non-zero lower bounded arrays are compatible with VB.NET multi-dimensional typed arrays: