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

chr*_*ris 38 vb.net arrays data-structures

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

我原以为这会起作用,但会产生错误:

Public Function TestError() As String()
    Return {"foo", "bar"}
End Function
Run Code Online (Sandbox Code Playgroud)

这有效:

Public Function TestOK() As String()
    Dim ar As String() = {"foo", "bar"}
    Return ar
End Function
Run Code Online (Sandbox Code Playgroud)

同样如下:

Public Function TestOK() As String()
    Return New String() {"foo", "bar"}
End Function
Run Code Online (Sandbox Code Playgroud)

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

pir*_*rho 36

在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} 
Run Code Online (Sandbox Code Playgroud)

查看更多信息:

Visual Basic 2010重大更改

Visual Basic 2010中的集合和数组初始值设定项


msa*_*het 14

Public Function TestError() As String()
     Return {"foo", "bar"}
End Function
Run Code Online (Sandbox Code Playgroud)

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

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

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


Fro*_*840 7

我相信您需要指定"Option Infer On"才能使其正常工作.

Option Infer允许编译器猜测代码所代表的内容,因此它会猜测{"stuff"}是一个字符串数组.随着"选项推断关",{"东西"}不会有分配给它,任何类型不断,所以它总是会失败,没有一个类型说明符.

选项推断是,我认为在新项目中默认为On,但默认情况下从早期框架迁移到3.5时为Off.

意见来了:

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

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

Dim X as Integer
Y = 3
Run Code Online (Sandbox Code Playgroud)

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