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中的集合和数组初始值设定项
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"}
我相信您需要指定"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)
这是可怕的,疯狂的,错误的.它会在你输入拼写错误时创建变量.我一直希望他们能从语言中删除它.