2009-02-01 2 views
0

Je souhaite créer un tableau/une liste de chaînes de chaînes séparées par des virgules (extensions de fichier) saisies dans une zone de texte.Valeur de zone de texte séparée par des virgules pour la liste/tableau de chaînes - Existe-t-il un meilleur moyen d'écrire ce code?

Pour le bloc de code suivant:

  Dim csv As String = Textbox1.Text + "," 

      While csv.IndexOf(".") <> -1 
       lstOfStrings.Add(csv.Substring(0, csv.IndexOf(","))) 
       csv = csv.Remove(0, csv.IndexOf(",") + 1) 
      End While 

La sortie est:

TextBox1.Text = ".exe, .php"

listOfStrings = { ".exe", " .php "}

Existe-t-il un meilleur moyen d'écrire ce code?

Répondre

5

Une meilleure façon serait d'utiliser la méthode Split:

Dim lstOfStrings() As String = Textbox1.Text.Split(","c) 
+0

Merci! En outre, une liste est-elle "plus légère" qu'une série de chaînes? – user57175

+0

Une liste de chaînes utilise en interne un tableau de chaînes pour le stockage, donc un tableau est plus léger, mais avec une taille fixe. Vous pouvez ajouter des éléments à la liste et la redimensionner dynamiquement si le tableau interne ne peut pas contenir les nouvelles données. –

+0

Non, une liste est légèrement plus lourde qu'un tableau, mais la différence sera insignifiante pour un programme graphique. – ggf31416

1

Voici une autre façon avec Regex + LINQ. Il permet des noms de fichiers entiers, si c'est quelque chose que vous appréciez. La division est préférable en fonction du degré de conditionnement de l'entrée (espaces et autres).

using System; 
using System.Linq; 
using System.Text.RegularExpressions; 
using System.Collections.Generic; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string s = "fileone.aspx, filetwo.csv,filethree.exe, filefour.php"; 
      List<string> extensions = Regex.Matches(s, @"(\.\w+)\s*,?") 
       .OfType<Match>().Select(m => m.Groups[1].Value) 
       .ToList(); 
      extensions.ForEach(i => Console.WriteLine(i)); 
      Console.ReadLine(); 
     } 
    } 
} 

SORTIE

.aspx

.csv

.exe

Afterthought

Vous pouvez ajouter .D istinct() si vous voulez des extensions uniques

Questions connexes