Я знаю, что вы можете легко передать массив функции, как показано в приведенном ниже коде.

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
6
Gert 23 Июл 2009 в 17:39

4 ответа

Лучший ответ

Еще одна вещь, о которой я только что подумал, не дает прямого ответа на вопрос, но, возможно, затрагивает цель плаката - ключевое слово 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")
3
Ryan Brunner 23 Июл 2009 в 14:26

Нет; в 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[]).

1
Marc Gravell 23 Июл 2009 в 13:41
SomeFunction({"some", "array", "member"}) ' this obviously gives a syntax error

Это совершенно допустимый синтаксис, начиная с VB10 (Visual Studio 2010). Видеть это:

2
Neolisk 13 Янв 2014 в 21:52

Самое близкое, что вы можете сделать, это:

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

Это фактически идентично с точки зрения созданных объектов тому, что вы опубликовали. На самом деле в .NET нет литералов массива, только помощники для инициализации.

4
Peter Mortensen 26 Апр 2016 в 14:29