在VB.NET中声明和初始化字符串数组

51
我试图从一个函数返回一个字符串数组,但被一个错误惊到了。 我本来指望它能够工作,但实际上产生了一个错误:
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个回答

52

在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 Breaking Changes

Visual Basic 2010中的集合和数组初始化器


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

这对我来说运行良好,而且应该也适用于您,但您可能需要允许在项目中使用隐式声明。我相信这是通过在程序设置的编译部分关闭“Options strict”来实现的。

由于您正在使用VS 2008(VB.NET 9.0),因此您必须声明并创建新实例。

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


使用VS2008,目标是.NET 3.5,并且选项显式关闭,但我仍然收到错误消息:“需要表达式”。 - chris

8

我认为你需要指定"Option Infer On",才能使其工作。

选项Infer允许编译器猜测代码所代表的内容,因此它会猜测{"stuff"}是一个字符串数组。如果"Option Infer Off",则{"stuff"}永远不会被分配任何类型,因此它总是失败,没有类型说明符。

我认为在新项目中默认情况下是On,但从早期框架升级到3.5时默认情况下是Off。

观点即将到来:

此外,你提到你有"Option Explicit Off"。请不要这样做。

设置"Option Explicit Off"意味着你不需要声明变量。这意味着以下代码将默默地和不可见地创建变量"Y":

Dim X as Integer
Y = 3

这是可怕的,疯狂的,错误的。当您输错时,它会创建变量。我一直希望他们能将其从语言中删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接