2011-03-10 111 views
31

我试图从一个函数中返回一个字符串数组,并且由于错误而感到惊讶。在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 

我猜我不清楚{}的含义 - 有没有一种方法隐式返回一个字符串数组而不显式创建和初始化它?

回答

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

对我来说工作正常,应该为你工作,但你可能需要允许在你的项目中使用隐式声明。我相信这会关闭程序设置的“编译”部分中的“严格”选项。

由于使用VS 2008(VB.NET 9.0),你必须声明创建新实例

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

+0

使用VS2008,目标是.NET 3.5,并选择明确的是关闭的,而我仍然得到一个错误:“表达式预期”。 – chris 2011-03-10 16:45:12

6

我相信你需要指定"Option Infer On"为这工作。

Option Infer允许编译器猜测代码所代表的内容,因此它会猜测{“stuff”}是一个字符串数组。当“选项关闭”时,{“stuff”}将不会有任何类型分配给它,有史以来,所以它总是会失败,没有类型说明符。

选项推理是,我认为默认情况下在新项目中打开,但在从早期框架迁移到3.5时默认为关闭。

意见来电:

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

设置“Option Explicit Off”意味着您不必声明变量。这意味着下面的代码将默默地和无形地创建变量“Y”:

Dim X as Integer 
Y = 3 

这是可怕的,疯狂的和错误的。它会在你输入错误时创建变量。我一直希望他们会从语言中删除它。