web-dev-qa-db-fra.com

Liste de chaînes à une chaîne

Disons que vous avez un:

List<string> los = new List<string>();

Dans ce monde fonctionnel fou dans lequel nous vivons, l'un de ceux-ci serait le mieux pour créer une chaîne en les concaténant:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

ou Plain old StringBuilder foreach

OU y a-t-il un meilleur moyen?

194
maxfridbe

J'irais avec l'option A:

String.Join(String.Empty, los.ToArray());

Mon raisonnement vient du fait que la méthode Join a été écrite à cette fin. En fait, si vous regardez Reflector, vous verrez que du code non sécurisé a été utilisé pour l’optimiser réellement. Les deux autres fonctionnent également, mais je pense que la fonction Join a été écrite à cet effet, et je suppose, la plus efficace. Je pourrais toutefois avoir tord...

Selon @Nuri YILMAZ sans .ToArray(), mais il s'agit de .NET 4+:

String.Join(String.Empty, los);
271
BFree
string.Concat(los.ToArray());

Si vous souhaitez simplement concaténer les chaînes, utilisez string.Concat () au lieu de string.Join ().

50
Pent Ploompuu

Si vous utilisez .net 4.0, vous pouvez utiliser une méthode de tri:

String.Join<string>(String.Empty, los);
17
mnieto

String.Join () est implémenté assez rapidement, et comme vous avez déjà une collection des chaînes en question, c'est probablement le meilleur choix. Surtout, il crie "Je me joins à une liste de chaînes!" Toujours sympa.

8
J Cooper
los.Aggregate((current, next) => current + "," + next);
6
landrady

Mon vote est string.Join

Pas besoin de créer d’évaluations lambda ni de fonctions temporaires, moins d’appels de fonctions, moins de poussées et de sauts de pile.

4
Tom Ritter