Подтвердить что ты не робот

Объявление и инициализация массива строк в VB.NET

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

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

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

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

4b9b3361

Ответ 1

Поддержка инициализатора массива для вывода типа была изменена в Visual Basic 10 vs 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

Ответ 2

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

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

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

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

Ответ 3

Мне кажется, вам нужно указать "Option Infer On" для этого.

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

Опция Infer - это, по-моему, On On по умолчанию в новых проектах, но Off по умолчанию при миграции из более ранних фреймворков до 3.5.

Мнение входящее:

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

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

Dim X as Integer
Y = 3

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