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

时间:2011-03-10 16:21:23

标签: vb.net arrays data-structures

我试图从函数中返回一个字符串数组,并对错误感到惊讶。

我原本预计这会有效,但会产生错误:

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 个答案:

答案 0 :(得分:35)

在Visual Basic 10与Visual Basic 9中更改了对类型推断的数组初始值设定项支持。

在以前的VB版本中,需要将空的parens表示为一个数组。此外,它将数组定义为对象数组,除非另​​有说明:

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

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

查看更多信息:

Visual Basic 2010 Breaking Changes

Collection and Array Initializers in Visual Basic 2010

答案 1 :(得分:14)

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

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

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

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

答案 2 :(得分:6)

我认为您需要指定"Option Infer On"才能生效。

选项推断允许编译器猜测代码所代表的内容,因此它会猜测{“stuff”}是一个字符串数组。使用“Option Infer Off”时,{“stuff”}将不会为其分配任何类型,永远,因此它将始终失败,没有类型说明符。

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

意见传入:

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

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

Dim X as Integer
Y = 3

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