#vb.net
#vb.net
Вопрос:
мне нужна помощь. Может быть, команда «цикл» полезна для этого, но я не знаю, как это сделать. И извините за плохой английский:P Вот более подробно;
Я больше не хочу использовать этот код для моего VB.Сетевое приложение:
Dim s As String = TypeHere.Text ' Heres target: TypeHere.Text
Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
If Words.Length > 0 Then
c1 = Words(0)
If Words.Length > 1 Then
c2 = Words(1)
End If
If Words.Length > 2 Then
c3 = Words(2)
End If
If Words.Length > 3 Then
c4 = Words(3)
End If
If Words.Length > 4 Then
c5 = Words(4)
End If
If Words.Length > 5 Then
c6 = Words(5)
End If
If Words.Length > 6 Then
c7 = Words(6)
End If
If Words.Length > 7 Then
c8 = Words(7)
End If
If Words.Length > 8 Then
c9 = Words(8)
End If
If Words.Length > 9 Then
c10 = Words(9)
End If
If Words.Length > 10 Then
c11 = Words(10)
End If
If Words.Length > 11 Then
c12 = Words(11)
End If
If Words.Length > 12 Then
c13 = Words(12)
End If
If Words.Length > 13 Then
c14 = Words(13)
End If
If Words.Length > 14 Then
c15 = Words(14)
End If
If Words.Length > 15 Then
c16 = Words(15)
End If
If Words.Length > 16 Then
c17 = Words(16)
End If
If Words.Length > 17 Then
c18 = Words(17)
End If
If Words.Length > 18 Then
c19 = Words(18)
End If
If Words.Length > 19 Then
c20 = Words(19)
End If
CMDTime()
End If
Как я могу сделать цикл для этого?:
If Words.Length > ? Then
Dim c? 1 = Words(?)
End If
Если пользователи ввели длину слов: 4
Автоматическая генерация:
Dim c5 = Words(4)
Dim c4 = Words(3)
Dim c3 = Words(2)
Dim c2 = Words(1)
Dim c1 = Words(0)
Пример для моей программы;
Пользователь> textbox.text> ввел сколько слов > dim c1 > word1, dim c2 …
Комментарии:
1. Привет! Есть ли причина, по которой вы не используете массив
Words
вместо своихc
переменных?2. Что ж, я понимаю, почему вы больше не хотите выполнять этот код, но я не уверен, почему вы хотите создавать переменные для хранения каждой строки из вашего массива? Что вы делаете с переменными C1, C2, C3 …. после того, как вы заполнили их словом (x)? Почему вы не можете просто использовать свой массив word () везде, где сейчас находятся переменные C? Надеюсь, я смогу помочь, как только я лучше пойму, что вы пытаетесь сделать, Отметьте
3. Как
c?
переменные определены прямо сейчас? Где еще они используются?
Ответ №1:
Почему бы не использовать массив? Я не совсем понимаю, что вы пытаетесь сделать, поскольку я не вижу полного кода.
Dim s As String = "The quick brown fox jumps over the lazy dog"
Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
Dim c(Words.Length - 1) As String
For x = 0 To Words.Length - 1
c(x) = Words(x)
Next
Console.WriteLine(String.Join("-", c))
Console.WriteLine(c(0))
Console.WriteLine(c(1))
Вывод:
The-quick-brown-fox-jumps-over-the-lazy-dog
The
quick
Комментарии:
1. @HasanMerkit пожалуйста, выберите этот ответ, если он вам помог.
Ответ №2:
Короткий ответ: нет, вы не можете этого сделать:
'Nooooo!
If Words.Length > ? Then
Dim c? 1 = Words(?)
End If
Но … ты программист, так что все возможно! Просто не всегда так, как мы себе это представляем вначале.
Вы не можете уменьшить переменные в цикле с динамическими именами, но есть альтернативы. Во-первых, у вас мог бы быть список переменных, к которым вы могли бы добавлять на каждом проходе вашего цикла.
Но этого было бы недостаточно, поскольку вы имели в виду, что имена ваших переменных должны быть значимыми. Таким образом, вам пришлось бы создать список KeyValuePair. Ключом будет значимое число, а значением будет строка. Вот так:
Dim myList As New List(Of KeyValuePair(Of Integer, String))
Dim index As Integer = 0
For Each s As String In words
index = 1
myList.Add(New KeyValuePair(Of Integer, String)(index, s))
Next
Но, на самом деле, этот метод довольно шаткий и будет излишне сложным в использовании.
С другой стороны, вы можете объявить массив Words()
как модульную переменную в своем классе и обновлять его каждый раз, когда вам нужно его использовать. Ваш предыдущий фрагмент кода будет сокращен до:
Dim s As String = TypeHere.Text ' Heres target: TypeHere.Text
Words = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
If Words.Length > 0 Then
CMDTime()
End If
Теперь вы знаете, что Words(0)
это то же самое, что и c1. Вместо этого вы можете использовать слова (0). Однако будьте осторожны, потому что, если вы жестко закодируете подобный индекс, иногда может произойти сбой, если вы выйдете за пределы. Вы можете избежать этого, защитив свой слабый код внутри If Words.Length > x Then
блоков, как вы делали раньше. Или, что я предпочитаю, если вам нужно перебирать каждую запись в массиве, делайте это в For Each
цикле. Если в массиве есть нулевые элементы, этот цикл не завершится сбоем.
Когда вы думаете об этом, вы уже делали это или почти. Ответ был в тебе с самого начала! Разве это не волшебство?
Если это не помогает, пожалуйста, попробуйте уточнить, что вы ищете. Кто-нибудь обязательно возьмет мяч и поможет!
Получайте удовольствие!
Ответ №3:
Все, что вам нужно, это ваши первые две строки кода:
Dim s As String = "Hello World"
Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
Тогда вы можете сделать это:
Console.WriteLine(Words.Length)
Console.WriteLine(Words(0))
Console.WriteLine(Words(1))
Это приводит:
2 Здравствуйте Мир
Просто там, где вы используете, c1
замените его на Words(0)
, c2
на Words(1)
и т.д. Вы бы использовали Words.Length
, чтобы узнать, сколько слов у вас есть.