Размер массива в Visual Basic?

Согласно вашей схеме , (в ролевом классе) оно должно быть:

@Column(name="roleid")

.. вместо:

@Column(name="id")

23
задан Andrei 5 May 2012 в 08:27
поделиться

5 ответов

Если Вы привыкли к языкам C/C ++/C#, Вы используетесь это, объявляя, что массив инициализирует его с число элементов в массиве.

C# : byte a[] = new byte[1]

объявит массив байтов с 1 элементом (upperBound = 0)

, поведение отличается в VB, где, при объявлении массива параметр, используемый в инициализации, представляет UpperBound массива.

VB.NET: Dim a(1) As Byte

объявит массив байтов с 2 элементами (upperBound = 1)

30
ответ дан AlexDrenea 29 November 2019 в 01:02
поделиться

В 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. Начальный индекс массива VB6 равняется 1, если Вы не объявляете Основу Опции 0. Было распространено циклично выполнить через массив размера N использование For i = 1 To N. Путем разработки VB.NET для интерпретации аргумента калибровки массива как верхней границы, а не числа элементов в массиве старый код VB6, который циклично выполнился от 1 до N, мог быть портирован непосредственно на VB.NET. Массив в VB.NET будет иметь один дополнительный элемент по сравнению с тем, что массив имел в VB6 (элемент в индексе 0), но иначе ведет себя, как он сделал в VB6.

Вы будете иногда видеть, что люди утверждают, что Visual Basic создает "потраченный впустую" элемент. Это только верно при портировании кода VB6 прежней версии, который не ожидал элемент в индексе 0. При написании нового кода просто необходимо помнить то, что параметр калибровки означает (верхняя граница, не количество элемента), и объявите массивы соответственно. Просто уменьшите свои параметры калибровки одним по сравнению с тем, что Вы видели бы в C#. Полученный массив будет иметь элементы от a(0) до a(a.Length-1), точно так же, как массив C#.

16
ответ дан Jaymin 29 November 2019 в 01:02
поделиться

Массив начинается с позиции 0. Вы определяете две позиции.

Если вам нужна только 1 позиция, то:

Dim a(0) As Byte

и вы получите a.Length как 1.

8
ответ дан SMB 29 November 2019 в 01:02
поделиться

Длина Размера индекс каждого размера на основе 0, что означает, что это колеблется от 0 до его верхней границы. Поэтому длина данного размера больше 1, чем заявленная верхняя граница для того размера.

Размер Массива в Visual Basic

8
ответ дан Nescio 29 November 2019 в 01:02
поделиться

Каждый из предыдущих ответов содержит части правильного ответа, но не полный правильный ответ. Когда вы объявляете массив (как в вашем коде: Dim a (1) As Byte), число, которое вы вводите в объявление массива (в данном случае 1), НЕ является объявлением , сколько записей в массив, это объявление верхней границы массива.

Итак, в вашем объявлении вы создаете массив с 2 записями: a (0) и a (1)

5
ответ дан Taegost 29 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: