2009-09-09 8 views
0

Existe-t-il un moyen de supprimer un élément d'une liste en fonction d'une chaîne?Rechercher et supprimer un élément de la liste

Je joue pendant quelques minutes et voici ce que j'ai à ce jour, mais sa ne fonctionne pas

foreach(string file in LB_upload.Items) 
{ 
    ftp.Upload(file); 
    int x = LB_upload.Items.IndexOf(file); 
    LB_upload.Items.RemoveAt(x); 
} 

je pouvais boucle à travers chaque élément, mais je voulais faire quelque chose d'un peu plus élégant

+0

Cela ne fonctionne pas parce que vous modifiez le IEnumerable que vous itérez. – Bavo

Répondre

2
while(LB_upload.Items.Count > 0) 
{ 
    ftp.Upload(LB_upload.Items[0].ToString()); 
    LB_upload.Items.RemoveAt(0); 
} 
+0

J'ai aimé celui-ci aussi mais je pense que John Kraft est le gagnant – Crash893

+0

J'ai changé pour cela comme réponse. J'ai dû ajouter un this.refresh pour montrer les mises à jour de la boîte. La raison en était que je voulais 1) montrer que les fichiers bougeaient et 2 s'il y avait un problème, que vous verriez quels fichiers sont restés. – Crash893

2

Selon votre exemple, je ferais quelque chose comme;


foreach(string file in LB_upload.Items) 
{ 
    ftp.Upload(file); 
} 
LB_upload.Items.Clear(); 

Le problème que vous êtes probablement rencontrez est que vous modifiez la liste tout en réitérant à ce sujet. C'est un gros non-non, et a été couvert ad-nauseum sur ce site.

+0

LOL, bonne solution! –

+0

ha oui je suppose que c'est la manière la plus élégante (1 ligne de code). – Crash893

2

En fonction du titre de votre question, il semble que vous ne souhaitiez pas supprimer tous les éléments, mais seulement certains d'entre eux. Si c'est le cas:

for (int i = LB_upload.Items.Count - 1; i >= 0; i--) 
{ 
    if (somecondition) 
    { 
     ftp.Upload(LB_upload.Items[i]); 
     LB_upload.Items.RemoveAt(i); 
    } 
} 
+0

+1 merci pour l'idée – Crash893

Questions connexes