Passing a constant array to a function in VB.NET

20,091

Solution 1

Another thing I just thought of that doesn't directly answer the question, but perhaps gets at the poster's intent - the ParamArray keyword. If you control the function you are calling into, this can make life a whole lot easier.

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")

Solution 2

The closest you can do is:

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

This is actually identical in terms of objects created to what you posted. There aren't actually array literals in .NET, just helpers for initialization.

Solution 3

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

This is a perfectly valid syntax starting with VB10 (Visual Studio 2010). See this:

Solution 4

No; there is no such thing as a constant array in CLI; arrays are always mutable. Perhaps a ReadOnlyCollection<T> would be suitable?

In C# (so presumably similar in VB) you can do something like:

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

Which gives you a static (=shared) non-editable, re-usable collection. This works especially well if the method accepts IList<T>, IEnumerable<T>, etc (rather than an array, T[]).

Share:
20,091
Gert
Author by

Gert

Updated on April 27, 2020

Comments

  • Gert
    Gert about 4 years

    I know that you can easily pass an array to a function, like the code below shows

    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
    

    But is there a way to pass a constant array to a function in VB.NET?

    For instance in PHP, you could write:

    function SomeFunction($array)
    {
        for($i=0;$i<count($array);$i++)
        {
             echo($array[$i]);
        }
    }
    
    function Test()
    {
        SomeFunction(array("some", "array", "members")); // Works for PHP
    }
    

    So to reiterate: Is there a way to pass a constant array directly to a function in VB.NET? Is there any benefit in doing so? I imagine a few bytes of memory could be spared.

    PS.:

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