将常量数组传递给VB.NET中的函数

时间:2009-07-23 13:39:43

标签: vb.net arrays constants

我知道您可以轻松地将数组传递给函数,如下面的代码所示

Private Sub SomeFunction(ByVal PassedArray() As String)
    For i As Integer = 0 To PassedArray.Count - 1
        Debug.WriteLine(PassedArray(i))
    Next
End Sub

Public Sub Test()
    Dim MyArray As String() = {"some", "array", "members"}

    SomeFunction(MyArray)
End Sub

但有没有办法将常量数组传递给VB.NET中的函数?

例如在PHP中,你可以写:

function SomeFunction($array)
{
    for($i=0;$i<count($array);$i++)
    {
         echo($array[$i]);
    }
}

function Test()
{
    SomeFunction(array("some", "array", "members")); // Works for PHP
}

重申一下:有没有办法将常量数组直接传递给VB.NET中的函数?这样做有什么好处吗?我想可以节省几个字节的内存。

PS:

SomeFunction({"some", "array", "member"}) ' This obviously gives a syntax error

4 个答案:

答案 0 :(得分:3)

你最接近的是:

SomeFunction(New String() {"some", "array", "members"})

根据您发布的对象创建的对象实际上是相同的。 .NET中实际上没有数组文字,只是初始化的帮助器。

答案 1 :(得分:2)

我刚才想到的另一件事并没有直接回答这个问题,但可能会得到海报的意图 - ParamArray关键字。如果你控制你正在调用的功能,这可以使生活变得更加轻松。

Public Function MyFunction(ByVal ParamArray p as String())
   ' p is a normal array in here
End Function

' This is a valid call
MyFunction(New String() {"a", "b", "c", "d"})

' So is this
MyFunction("a", "b", "c", "d")

答案 2 :(得分:2)

SomeFunction({"some", "array", "member"}) ' this obviously gives a syntax error

这是一个完全有效的语法,从VB10开始(Visual Studio 2010)。见:

答案 3 :(得分:1)

没有; CLI中没有常量数组这样的东西;数组总是可变的。也许ReadOnlyCollection<T>适合吗?

在C#中(大概在VB中类似)你可以做类似的事情:

private readonly static ReadOnlyCollection<string> fixedStrings
    = new ReadOnlyCollection<string>(
        new string[] { "apple", "banana", "tomato", "orange" });

这为您提供了一个静态(=共享)不可编辑,可重复使用的集合。如果方法接受IList<T>IEnumerable<T>等(而不是数组,T[]),则效果尤其好。