String Array Thing! - PullRequest
       12

String Array Thing!

0 голосов
/ 09 ноября 2009

Правильно - для начала, я вхожу в незнакомые области с этим - так что будьте добры!

У меня есть скрипт, который выглядит примерно так:

Private Function checkString(ByVal strIn As String) As String
    Dim astrWords As String() = New String() {"bak", "log", "dfd"}
    Dim strOut As String = ""
    Dim strWord As String
    For Each strWord In astrWords
        If strIn.ToLower.IndexOf(strWord.ToLower, 0) >= 0 Then
            strOut = strWord.ToLower
            Exit For
        End If
    Next
    Return strOut
End Function

Его функция заключается в проверке входной строки и проверке наличия каких-либо из этих «звездочек», а затем возвращении значения.

Итак, я написал немного кода для динамического создания тех слов, которые выглядят примерно так:

Dim extensionArray As String = ""
    Dim count As Integer = 0
    For Each item In lstExtentions.Items
        If count = 0 Then
            extensionArray = extensionArray & """." & item & """"
        Else
            extensionArray = extensionArray & ", ""." & item & """"
        End If
        count = count + 1
    Next
    My.Settings.extensionArray = extensionArray
    My.Settings.Save()

Очевидно - он создает тот же массив, используя элементы списка. Вывод этого кода точно такой же, как если бы я жестко закодировал его, но когда я изменяю первый бит кода на: Dim astrWords As String () = New String () {My.Settings.extensionArray} вместо: Dim astrWords As String () = New String () {"bak", "log", "dfd"} Он начинает искать все утверждение вместо того, чтобы перебирать каждое отдельное утверждение?

Я думаю, что это как-то связано с наличием скобок в конце строки слова - но я потерялся!

Любая помощь приветствуется:)

Ответы [ 4 ]

2 голосов
/ 09 ноября 2009

Когда вы используете строку из настроек в буквенном массиве, все равно, что вы использовали одну строку, содержащую строки с разделителями:

Dim astrWords As String() = New String() {"""bak"", ""log"", ""dfd"""}

Что вы, вероятно, хотите сделать, это поместить в настройках строку, разделенную запятыми, например "bak,log,dfd", а затем разделить ее, чтобы получить массив:

Dim astrWords As String() = My.Settings.extensionArray.Split(","C)
0 голосов
/ 09 ноября 2009

Я думаю, вы хотите, чтобы ваш extensionArray имел тип String (), а не String. Когда вы пытаетесь инициализировать новый массив, инициализатор не знает, как проанализировать несколько значений. Он просто видит вашу единственную строку.

0 голосов
/ 09 ноября 2009

То, что вы сделали, создали одну строку, содержащую все 3 слова. Вам нужно создать массив строк.

New String() {"bak", "log", "dfd"}

означает создание нового массива строк, содержащего 3 строки значений «bak», «log» и «dfd».

New String() {My.Settings.extensionArray}

означает создание нового массива строк, содержащего только одно значение, которое является содержимым extensionArray. (Который вы установили на "" bak "," log "," dfd ""). Обратите внимание, что это одна строка, а не массив строк. Вы не можете просто создать 1 строку с запятыми в ней, вам нужно создать массив строк.

Если вы хотите создать свой массив динамически, вам нужно определить его следующим образом:

Dim astrWords As String() = New String(3)

Это создает массив с 3 пустыми пробелами.

Затем вы можете назначить строку каждому пробелу, выполнив следующее:

astrWords(0) = "bak"
astrWords(1) = "log"
astrWords(2) = "dfd"

Вы можете сделать этот бит в цикле for:

Dim count As Integer = 0
For Each item In lstExtentions.Items
    astrWords(count) = item
    count = count + 1
Next

Кроме того, вы можете посмотреть на использование универсальной коллекции . Таким образом, вы можете использовать метод Add () для добавления в него нескольких строк

0 голосов
/ 09 ноября 2009

Вам нужно установить extensionArray как строковый массив вместо просто string . Обратите внимание, что

Dim something as String  

... определяет одну строку, но

Dim somethingElse as String()  

... определяет целый массив строк.

Я думаю, что с вашим кодом вам нужно что-то вроде:

Dim extensionArray As String() = new String(lstExtensions.Items)
Dim count As Integer = 0
For Each item In lstExtentions.Items
    extensionArray(count) = item
    count = count + 1
Next
My.Settings.extensionArray = extensionArray
My.Settings.Save()

Тогда в начале checkString вам нужно что-то вроде

Private Function checkString(ByVal strIn As String) As String
    Dim astrWords As String() = My.Settings.extensionArray
    ...

Также может быть еще более простой способ превратить lstExtentions.Items в массив, если у Items есть метод ToArray (), но я не уверен, какой тип вы там используете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...