#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
Ответ №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. Миллион благодарностей… вы оказали большую помощь