массив, который изменяет длину во время выполнения в vb.net

#vb.net

#vb.net

Вопрос:

В vb.net как я могу объявить массив без указания размера? и он изменяет размер по мере поступления входных данных?

 Sub Main()
    Dim s() As String
    ReDim Preserve s(UBound(s)   1)
    Dim counter As Integer
    counter = 0
    Do

        Console.WriteLine("Enter Name: ")
        s(counter) = Console.ReadLine()
        counter = counter   1
    Loop Until counter <> -1



    For Each arr In s
        Console.WriteLine(arr)
    Next
End Sub
  

Конечный модуль

Комментарии:

1. Основываясь на вашем описании, вы не можете. Вы могли бы использовать список (строки) вместо массива.

Ответ №1:

Попробуйте использовать список вместо массива.

     Dim s As New List(Of String)
    Dim inp As String
    Do
        Console.WriteLine("Enter Name: ")
        inp = Console.ReadLine
        If inp <> "" Then
            s.Add(inp)
        End If
    Loop Until inp = ""

    For Each itm As String In s
        Console.WriteLine(itm)
    Next
  

Список (из T) документации

Ответ №2:

Вам нужно ReDim Preserve перед вставкой каждого имени:

 Sub Main()
    Dim s() As String
    Dim response As String
    Dim counter As Integer = 0

    Do
        Console.Write("Enter Name (enter `quit` to stop): ")
        response = Console.ReadLine()
        If response.ToLower <> "quit" Then
            ReDim Preserve s(counter)
            s(counter) = response
            counter = counter   1
        End If
    Loop While response.tolower <> "quit"

    If counter > 0 Then
        For Each arr In s
            Console.WriteLine(arr)
        Next
    End If

    Console.Write("Press Enter to quit")
    Console.ReadLine()
End Sub
  

Комментарии:

1. Этот ответ не является неправильным, но в большинстве случаев вам следует просто придерживаться использования списка.

2. @Meta-Knight согласился, на самом деле никто не делает это таким образом. Единственный раз, когда я действительно использую массивы, — это когда они возвращаются мне (например, из String. Split()), или если этого требует какая-то вспомогательная функция … но даже тогда я начинаю со списка, а затем вызываю toArray() против него и передаю это.

3. Миллион благодарностей… вы оказали большую помощь