В чем разница между Dim v As String () и Dim v () As String?

Это может показаться тривиальным, но в чем разница между Dim v As String () и Dim v () As String в VB.NET?

Нет разницы. Из спецификации языка VB.NET в массивах :

Типы массивов указываются путем добавления модификатора к существующему типу . Модификатор состоит из левой скобки, набора из нуля или более запятых и правой скобки.

Переменная может также быть объявлена ​​типом массива, помещая модификатор типа массива или модификатор инициализации массива в имя переменной . В этом случае тип элемента массива является типом, указанным в объявлении, а размеры массива определяются модификатором имени переменной. Для ясности недопустимо иметь модификатор типа массива как для имени переменной, так и для имени типа в той же декларации .

Первоначально в Basic вы определяли массивы, но не переменные. И типы переменных были определены символом суффикса: A $ – строка, а A% – целое число, а A # – двойная точность. (и все три были отличными и могли использоваться одновременно) (Для одной точности вы можете использовать A !, но это было по умолчанию, если вы только что использовали A)

В конце концов, программисты поняли, что это были невероятно плохие варианты дизайна.

Чтобы исправить это, Microsoft добавила «Option Explicit», которая требовала предопределить каждую переменную. Чтобы уменьшить влияние на язык, они захватывают команду «DIM», которая использовалась для определения массивов, для определения скалярных переменных.

Итак, изначально:

  DIM A(50) ' define 51-element single-precision array 

затем

  DIM A(50) ' define 51-element single-precision array DIM A$ ' define a string 

Затем, чтобы избавиться от суффиксов, они добавили синтаксис «как {тип]

  DIM A(50) ' define 51-element single-precision array DIM B as String DIM C(50) as String ' define 51-element string array. 

Затем они сделали переменную размера массива.

  DIM A() ' define single-precision array DIM B as String DIM C() as String ' define string array. 

Это оставило конфликт в стиле определения, поэтому они разрешили оба:

  DIM A() ' define single-precision array DIM B as String DIM C() as String ' define string array. DIM D as String() ' define string array. 

Нет никакой разницы.

Оба Dim v As String() и Dim v() As String будут создавать массив строк

Традиционно, в Basic, вы должны поместить скобки после имени переменной. В VB.Net разрешено помещать их после типа, если хотите. Результат такой же, поэтому нет разницы, используя любой синтаксис. Причина этого добавления заключается в том, что вы можете построить массив. Рассмотрим следующий код:

  Public Sub MethodThatExpectsAnArray(ByVal arr() As String) '... End Sub Public Sub Main() Me.MethodThatExpectsAnArray(New String() {"Hello", "World"}) End Sub 

В вызове я строю массив «на лету» без какого-либо назначения, кроме непосредственно аргумента метода. Поскольку здесь нет переменной, я должен установить paranthesis после типа. Чтобы разрешить этот синтаксис, Microsoft имела возможность либо изменить, как вы традиционно объявляете массивы в Basic или допускаете оба синтаксиса. Они, конечно, предпочли последний.

Нет никакой разницы.

Это в основном семантика. Первый читает как create variable "v" of type string array а второй читает как create array "v" of type string . В любом случае результатом является тот же массив строк.

Нет никакой разницы в значении этих двух.

Если вы хотите объявить несколько переменных в одном выражении dim, вторая форма обеспечивает большую гибкость: dim v (), v2, поскольку строка позволяет объявлять типы массивов и типы без массивов в том же самом выражении.

  • Массивы указателей функций в Фортране
  • Сохраняется ли порядок элементов в списке JSON?
  • Ошибка компиляции кода слишком велика в Java
  • Почему многомерные массивы C # не реализуют IEnumerable ?
  • Сопоставьте 2D-массив с массивом 1D
  • 1D или 2D, что быстрее?
  • Сопоставление массива PostgreSQL с Hibernate
  • Каков максимальный размер, который может содержать массив?
  • Измерение петли по размеру массива в plpgsql
  • Адрес указателя в многомерном массиве C
  • Существуют ли другие распространенные «c-like» или «c-like» языки с ненулевой позицией индекса?
  • Давайте будем гением компьютера.