Объявление и инициализация массива строк в VB.NET - PullRequest
37 голосов
/ 10 марта 2011

Я пытался вернуть массив строк из функции и был удивлен ошибкой.

Я ожидал, что это сработает, но выдает ошибку:

Public Function TestError() As String()
    Return {"foo", "bar"}
End Function

Это работает:

Public Function TestOK() As String()
    Dim ar As String() = {"foo", "bar"}
    Return ar
End Function

Как и:

Public Function TestOK() As String()
    Return New String() {"foo", "bar"}
End Function

Полагаю, мне неясно, что означают {} - есть ли способ неявного возврата строкимассив без явного создания и инициализации?

Ответы [ 3 ]

35 голосов
/ 11 марта 2011

Поддержка инициализатора массива для вывода типов была изменена в Visual Basic 10 по сравнению с Visual Basic 9.

В предыдущей версии VB требовалось ставить пустые символы скобок для обозначения массива. Кроме того, он будет определять массив как массив объектов, если не указано иное:

' Integer array
Dim i as Integer() = {1, 2, 3, 4} 

' Object array
Dim o() = {1, 2, 3} 

Проверьте больше информации:

Изменения в Visual Basic 2010

Инициализаторы коллекции и массива в Visual Basic 2010

14 голосов
/ 10 марта 2011
Public Function TestError() As String()
     Return {"foo", "bar"}
End Function

Хорошо работает для меня и должно работать для вас, но вам может потребоваться разрешить использование неявных объявлений в вашем проекте.Я считаю, что это отключение строгих параметров в разделе «Компиляция» параметров программы.

Поскольку вы используете VS 2008 (VB.NET 9.0), вы должны объявить создание нового экземпляра

New String() {"foo", "Bar"}

6 голосов
/ 11 марта 2011

Я полагаю, что вам нужно указать "Option Infer On" , чтобы это работало.

Опция Infer позволяет компилятору угадать, что представлено вашим кодом, таким образомон будет догадываться, что {"stuff"} - это массив строк.Если "Option Infer Off", {"stuff"} не будет назначен никакой тип, ever , и поэтому он всегда будет работать без спецификатора типа.

Option Inferесть, я думаю включено по умолчанию в новых проектах, но выключено по умолчанию при переходе с более ранних платформ до 3.5.

Мнение поступает:

Кроме того, вы упоминаете, что у вас есть «Option Explicit Off» . Пожалуйста, не делайте этого.

Установка «Option Explicit Off» означает, что вам никогда не придется объявлять переменные.Это означает, что следующий код будет тихо и незаметно создавать переменную «Y»:

Dim X as Integer
Y = 3

Это ужасно, безумно и неправильно.Это создает переменные, когда вы делаете опечатки.Я продолжаю надеяться, что они уберут это из языка.

...