8
votes

meilleure façon de convertir la collection en chaîne

J'ai besoin de convertir une collection de sur une seule chaîne contenant toutes les valeurs de la collection comme KeyValuekeyValue ... mais comment puis-je faire cela efficacement?

i l'avez fait de cette façon pour le moment: xxx

mais pas sûr que ce soit le meilleur moyen de le faire, un constructeur à cordes serait-il meilleur? Je suppose que la collection contiendra un max de 10 paires.


1 commentaires

Votre chemin semble assez gentil et compact.


3 Réponses :


0
votes

Cordeur de cordes irait bien. Utilisez l'annexe pour ajouter chaque chaîne au constructeur de cordes.

Fondamentalement la seule raison pour laquelle Concat, remplacer, rejoindre, String + String, etc. sont considérés comme non-les-meilleurs car ils ont tous tendance à détruire la chaîne actuelle et recréer un nouveau.

Alors, lorsque vous avez ajouté des cordes comme jusqu'à 10-12 fois, cela signifie vraiment que vous allez détruire et recréer une chaîne à plusieurs reprises.


0 commentaires

8
votes

Avec une telle petite collection, il n'ya pas beaucoup de problème de performance, mais j'utiliserais probablement un StringBuilder pour ajouter toutes les valeurs.

Comme ceci: P>

var sb = new Text.StringBuilder;
foreach (var item in requestParameters)
{
    sb.AppendFormat("{0}{1}", item.Key, item.Value);
}
var parameters = sb.ToString();


1 commentaires

Mais ceci est juste dupliquer ce que string.join est en interne (l'OP semble être sur .NET 4.0, il a donc accès à la surcharge qui accepte une ienumerable ).



7
votes

string.join n'est pas vraiment la meilleure option car il est uniquement accepté string [] ou objet [] paramètres, exigeant que Tout SELECT -Style requis doit être complètement évalué et mettre dans un tableau d'abord.

.NET 4.0 apporté avec elle Une surcharge accepte ienumerable - qui est ce que vous utilisez - - et même une surcharge qui accepte tout ienumerable . Ce sont définitivement votre meilleur choix car ils font maintenant partie de la BCL.

Incidemment, la fissuration Ouvrez la source pour la première surcharge dans Réflecteur Affiche le code qui suit assez près de Ce que Davisoa a suggéré : xxx

donc en d'autres termes, si vous deviez changer ce code pour utiliser un Stringbuilder , vous réécrivez simplement ce que MS a déjà écrit pour vous.


0 commentaires