Объявление и инициализация массива строк в 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
Я думаю, что я неясен в смысле {} - есть ли способ неявно возвращать строковый массив без явного создания и инициализации его?
Ответы
Ответ 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
Это ужасно, безумно и неправильно. Он создает переменные, когда вы делаете опечатки. Я продолжаю надеяться, что они удалят его с языка.