2009-11-09 5 views
0

Droit - pour commencer, je vais entrer dans des zones inconnues avec cela - alors s'il vous plaît soyez gentil!String Array Thing!

J'ai un script qui ressemble un peu à quelque chose comme ceci:

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 

Il est fonction est de vérifier la chaîne d'entrée et de voir si l'un de ces « astrWords » sont là-bas et puis retourner la valeur.

J'ai donc écrit un peu de code pour créer dynamiquement ces mots qui ressemble à ceci:

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() 

De toute évidence - il est la création de ce même tableau en utilisant les éléments de liste. La sortie de ce code est exactement la même que si je l'ai codé en dur - mais quand je change le premier bit de code à: Dim astrWords As String() = Nouvelle chaîne() {My.Settings.extensionArray} au lieu de: Dim astrWords As String() = Nouvelle chaîne() {"bak", "log", "dfd"} Il commence à chercher l'instruction entière au lieu de faire défiler chaque instruction individuelle?

Je pense que cela a quelque chose à voir avec des parenthèses à la fin de la chaîne de caractères - mais je suis perdu!

Toute aide appréciée :)

Répondre

2

Lorsque vous utilisez la chaîne à partir des paramètres du tableau littéral, il est comme si vous avez utilisé un seul chaînes contenant les chaînes délimitées:

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

Qu'est-ce que vous voulez sans doute faire est de mettre une virgule chaîne séparée comme "bak,log,dfd" dans les paramètres, vous pouvez le diviser pour obtenir comme un tableau:

Dim astrWords As String() = My.Settings.extensionArray.Split(","C) 
+0

Vous êtes un génie! C'est parfait! Merci beaucoup - codage heureux :) –

0

Vous devez définir extensionArray comme un tableau de chaînes au lieu de simplement une chaîne . Notez que

Dim something as String 

... définit une seule chaîne, mais

Dim somethingElse as String() 

... définit tout un éventail de chaînes.

Je pense qu'avec votre code, vous avez besoin quelque chose comme:

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() 

Puis au début vous checkString besoin de quelque chose comme

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

Il pourrait aussi être un moyen encore plus facile à tourner lstExtentions .Items dans un tableau si Items a une méthode 'ToArray()', mais je ne suis pas sûr quel type vous utilisez là ...

0

Ce que vous avez fait est créé une seule chaîne contenant tous les 3 mots. Vous devez créer un tableau de chaînes.

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

signifie créer un nouveau tableau de chaînes contenant les 3 valeurs de chaînes "bak", "log" et "dfd".

New String() {My.Settings.extensionArray} 

signifie créer un nouveau tableau de chaînes contenant une seule valeur qui est le contenu de extensionArray. (Ce que vous avez défini sur "" bak "," log "," dfd ""). Notez que c'est une chaîne, pas un tableau de chaînes. Vous ne pouvez pas créer une seule chaîne avec des virgules, vous devez créer un tableau de chaînes.

Si vous voulez créer votre tableau dynamique, vous devez définir comme ceci:

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

Cela crée un tableau avec 3 espaces vides.

Vous pouvez ensuite assigner une chaîne à chaque espace en faisant ceci:

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

Vous pouvez faire peu dans une boucle:

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

Sinon, vous pouvez envisager d'utiliser un generic collection . De cette façon, vous pouvez utiliser la méthode Add() pour ajouter plusieurs chaînes à elle

0

Je pense que vous voulez que votre extensionArray soit de type String() et non String. Lorsque vous essayez d'initialiser le nouveau tableau, l'initialiseur ne sait pas analyser plusieurs valeurs. Il voit juste votre chaîne unique.