chaîne pour accumuler à l'aide de KeyValuePair est comme ceci: "Nom1 = V1 & nom2 = v2 & nom3 = v3"
Qu'est-ce que je fais: p>
var sb = new StringBuilder(); foreach (var name in nameValues) { sb.AppendFormat("{0}={1}&", name.Key, name.Value); } //remove last '&' sign, this is what i think is ugly sb.ToString().Remove(lastIndex);
7 Réponses :
Bien au moins Vous pouvez supprimer le panneau & code> avant le
Tostring () code> appeler en faisant
- Sb.length; code> p >
foreach (var name in nameValues) { if (sb.Length > 0) sb.Append("&"); sb.AppendFormat("{0}={1}", name.Key, name.Value); } Just add "&" when needed, do not remove it from end.
Et si la vitesse est une préoccupation, utilisez SB.Append (nom_quipe) .append ("="). Ajoutez (nom.value);
Jetez un coup d'oeil ici: Comment Construire une chaîne de requête pour une URL en C #? ; Citant:
Cuil! Cela aura plus de frais si accessible en tant que méthode d'extension.
Existe-t-il une nomeurocollection qui peut contenir une chaîne, une paire d'objets?
Vous ne pouvez pas utiliser un dictionnaire
var sb = new StringBuilder(); sb.AppendFormat("{0}={1}", nameValues[0].Key, nameValues[0].Value); for (int i = 1; i < nameValues.Count; i++) { sb.AppendFormat("&{0}={1}", nameValues[i].Key, nameValues[i].Value); }
Petite typo sur la première appendormat - il n'a pas besoin de "&". Cette méthode fonctionne bien s'il est garanti d'au moins une entrée.
Voici une autre approche que j'ai parfois utilisée: C'est juste un moyen de préparer et avant chaque paire autre que le premier sans utiliser de test conditionnel. P> Si vous souhaitez utiliser votre idée originale de couper le StringBuilder CODE> d'ici comment, je suggère le code suivant à la place: P>
sb.Length--; // Remove the last character
return sb.ToString();
Vous pouvez aussi utiliser "& {0} = {1}" code> et bander premier i> caractère avec un
Sb.Tostring (1, Sb.Length - 1 ) code>
var joined = String.Join("&", nameValues.Select(n => n.Key + "=" + n.Value).ToArray()); Given that we're not concatenating to one big string (we're producing many small strings) concatenation carries no performace penalties in this case. And in .NET strings are length prefixed anyway so the whole concatenation performance issue is less relevant than in C. String.Join() is very fast as well, faster than StringBuilder.TLDR: Use String.Join()
Vous avez oublié le "n =>" dans la sélection. var joind = string.join ("&", namevalues.select (n => string.concat (N.Key, "=", N.Value)). Toarray ());
Hélium: Oui, je sais que je l'ai réparé. Je ne suis pas encore réveillé à 100%.
J'ai tendance à utiliser ceci, en utilisant le fait que vous pouvez tronquer un constructeur de chaîne avec une décrément de la propriété de longueur:
Je pense que c'est la meilleure façon dont vous faites, cela évitera des contrôles supplémentaires pour chaque itération présentée ci-dessous.