12
votes

Comment mettre le contenu d'une liste dans une seule boîte?

Fondamentalement, j'ai une liste avec plusieurs éléments de l'information et je veux une seule boîte de message pour les afficher tous.

Le plus proche que j'ai reçu est une boîte de message pour chaque élément (en utilisant foreach ).

Ce que je veux, c'est l'équivalent de: xxx

mais évidemment que cela ne fonctionnera pas! Quelle est la bonne façon de faire cela?


0 commentaires

5 Réponses :


28
votes

Vous pouvez tout rejoindre dans une seule chaîne avec string.join < / code> : xxx

Toutefois, si vous n'avez pas accès à .NET 4, vous n'avez pas cette surcharge qui prend un ienumerable . Vous devrez revenir sur celui qui prend un tableau : xxx


1 commentaires

Utilisez le "," au lieu du respiornemental.Newline .



4
votes

Si vous avez .NET 4.0

string s = String.Join(",", list.ToArray());


0 commentaires

4
votes

Vous pouvez également utiliser StringBuilder:

StringBuilder builder = new StringBuilder();


foreach(string str in list)
{
    builder.Append(str.ToString()).AppendLine();  
}           

Messagebox.Show(builder.ToString());


1 commentaires

Il y a une surcharge de l'annexe qui prend un paramètre. En utilisant cela rendrait le code plus simple. En outre, il y a une surcharge qui prend un objet et des appels qui y appellent, il n'ya donc aucun besoin de l'appeler vous-même.



3
votes

Juste pour le plaisir et au cas où vous avez besoin de faire quelque chose comme ça avec des collections non stresses, une version LINQ utilisant agrégat code>, qui est le plus proche de la syntaxe de votre exemple. Ne l'utilisez pas ici, utilisez effectivement string.join code> dans ce cas, mais gardez à l'esprit que vous avez quelque chose à Linq qui peut faire ce dont vous avez besoin.

MessageBox.Show("List contains: " + list.Aggregate(new StringBuilder(), 
                                               (sb,val) => sb.AppendLine(val), 
                                               sb => sb.ToString()));


3 commentaires

Si vous utilisez agrégat , il est préférable d'agréger une chaîne StringBuilder, au lieu d'une chaîne: .agregistrate (nouveau stringbuilder (), (SB, X) => SB.AppendorLine (x) , sb => sb.tostring ()); : p


@Martinho Fernandes: C'est une très bonne suggestion pour une solution très loufaie!


Envisager de passer la liste "contient:" au constructeur stringbuilder . Ajouter des parenthèses manquantes à la fin.



1
votes

Vous devez simplement faire une boucle pour une boucle par exemple:

 string total ="";
    for(int i =0; i<x.count ;i++)
   {
     total =total+x[i] +"\n";
   }
   MessageBox.Show(total);


0 commentaires