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

Linq-решение с использованием Distinct () и без группировки:

var _people = personList
    .Select(item => new { Key = item.Key, FirstAndLastName = item.FirstAndLastName })
    .Distinct()
    .ToDictionary(item => item.Key, item => item.FirstFirstAndLastName, StringComparer.OrdinalIgnoreCase);

Я не знаю, хорош ли это, чем решение LukeH, но оно также работает.

14
задан Vincent 10 February 2009 в 16:50
поделиться

6 ответов

Никакое различие. Из Спецификации языка VB.NET на Массивах:

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

...

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

11
ответ дан 1 December 2019 в 02:29
поделиться

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

В конечном счете программисты пришли к пониманию, что это были невероятно плохие проектные решения.

Для исправления этого Microsoft добавила "Опцию, Явную", который потребовал, чтобы Вы предопределили каждую переменную. Для уменьшения эффекта на язык они угоняют команду "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.
10
ответ дан 1 December 2019 в 02:29
поделиться

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

  Public Sub MethodThatExpectsAnArray(ByVal arr() As String)
    '...
  End Sub

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

В вызове я создаю массив "на лету" без любого присвоения кроме непосредственно к аргументу метода. С тех пор нет никакой переменной здесь, я должен установить круглую скобку после типа. Чтобы позволить этому синтаксису, Microsoft имела выбор или измениться, как Вы традиционно объявляете массивы в Основном или допускаете оба синтаксиса. Они, конечно, выбрали последнего.

2
ответ дан 1 December 2019 в 02:29
поделиться

Нет никакого различия.

1
ответ дан 1 December 2019 в 02:29
поделиться

Нет никакого различия в значении двух.

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

0
ответ дан 1 December 2019 в 02:29
поделиться

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

1
ответ дан 1 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

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