Question

Dans mes premiers jours de programmation .Net, je string.Format () uniquement pour les concaténations de chaînes complexes, par exemple pour compiler des chaînes comme

Problème avec commande client 234 Date 02/02/2002 et id paiement 55543.

Mais maintenant j'utilise string.Format pour presque tous les concaténation de chaînes que je dois faire, aussi simples tels que préfixer une chaîne avec quelque chose.

Console.WriteLine(string.Format("\t\t{0}", myString));

Y at-il possible frais généraux à ce sujet? Peut-être que je devrais utiliser l'opérateur + régulier pour effectuer ces opérations simples?

Quelle est votre opinion à ce sujet?

Était-ce utile?

La solution

Pour concaténations simple chaîne utilisent l'approche +. Il est plus clair pour des choses simples qui ne nécessitent pas un format.

Pour les chaînes plus complexes qui ont un certain format et où il est utile de conserver la structure de la chaîne entière et de fournir un espace réservé pour l'entrée, utilisez String.Format.

Et oui, il y a une surcharge. String.Format utilise un StringBuilder sous les couvertures. concaténations de chaînes simples sera beaucoup plus rapide dans ces scénarios. Quelques points de repère et les messages de blog sur ce sujet se trouve assez facilement. Bien sûr, tout dépend de votre utilisation. Si les petites concats de chaîne se produisent dans une boucle puis l'utilisation répétée de String.Format sera probablement plus visible qu'un concat de + simple. Si vous construisez une grand string dans une boucle alors l'exemple classique est à préférer StringBuilder et des questions connexes sur concat contre StringBuilder se trouvent sur le SO.

EDIT: Pour clarifier, cela sert à rien: String.Format("{0}{1}", a, b) car il n'y a pas beaucoup de mise en forme. Il est tout simplement a + b. Malheureusement, je suis venu à travers ces exemples dans le code de production et dès que je vois String.Format j'attends de voir quelque chose qui doit être structuré d'une certaine façon, pas un concat simple.

OTOH, pensez à ce numéro de téléphone: "(" + area + ") " + number + " x" + extension - il y a trop de choses et il est difficile de modifier. Dans ce cas, String.Format est préférable: String.Format("({0}) {1} x{2}", area, number, extension). Ceci est encore un exemple trivial, mais vous voyez l'idée.

Autres conseils

J'ai aussi tendance à utiliser string.Format sur la plupart des opérations qui ont besoin de deux ou plusieurs chaînes / valeurs à combiner comme il produit plus facile à lire le code de démarrage et d'arrêt des chaînes avec l 'au milieu +.

Pour développer

string value = string.Format("Hello {0}", user.username);

est beaucoup plus facile à lire et extensible à

string value = "Hello" + user.username

, par exemple, si vous vouliez ajouter la dernière date de connexion en tant que mise à niveau du système, vous pouvez simplement étendre le code à la suivante

string value = string.Format("Hello {0}, you last logged in {1}", user.username, user.lastLogin);

concaténation simple est plus efficace pour des choses simples. Utilisez String.Format() pour quand les choses deviennent plus compliquées et il rend votre code plus facile à lire.

Personnellement, je ne la même chose (tant que la fonction que j'appelle ne gère pas la mise en forme pour moi).


Clarrification

Pour la concaténation de chaîne régulière comme "Hello " + "World!"; je voudrais utiliser un StringBuilder. Votre exemple formate la chaîne pour la sortie par préfixer deux onglets ... que je considère plus comme le formatage.

Il y a une différence entre la mise en forme et la concaténation ... faire attention à ce que vous utilisez pour qui.


String.Format() utilise un StringBuilder interne de sorte que la concaténation va être plus efficace que de faire concaténation de chaîne régulière de toute façon.

Vous pouvez changer votre exemple depuis Console.WriteLine() peut gérer lui-même la mise en forme (pas String.Format() nécessaire):

Console.WriteLine("\t\t{0}", myString);

Ma règle est de savoir si je dois utiliser le + (concaténation) plus d'une fois que je change à un string.Format.

string a = "Something: " + x;   // ok

string b = "Something: " + x + " something else"; // change it to a string.Format
string bB = string.Format("Something: {0} something else", x); // much nicer to read

string c = "Something: " + x + " " + y + " " + z;  // Yuck
string cC = string.Format("Something: {0} {1} {2}", x, y, x);  // Much nicer

Je ne sais pas sur la performance, quelqu'un fournira probablement des données, mais mon sentiment est que String.Format est la voie à suivre si vous voulez mettre la chaîne de format dans votre fichier de configuration (ou champ de base de données ou fichier de ressources ou peu importe). De cette façon, si vous souhaitez modifier le nombre d'onglets, passer à des espaces, ajouter délimiteurs, ou que ce soit, vous n'avez pas à recompiler.

J'ai tendance à utiliser String.Concat au lieu de String.Format quand j'ai juste besoin de préfixe ou un suffixe d'une chaîne donnée. Je préfère l'appel explicite à la Concatmethod puis d'utiliser l'opérateur de + et si vous utilisez déjà String.Format il est juste une question de commutation d'une séquence de touches.

IIRC, la méthode String.Concat sera le même que l'utilisation de l'opérateur de sorte qu'il soit également plus rapide que String.Format.

J'utilise presque toujours le format, bien que j'utilise une méthode d'extension au lieu de la méthode de chaîne statique. Je trouve plus facile à comprendre, plus facile à changer, et généralement plus facile à entretenir. Il peut également faciliter la localisation, car il ne présente pas de problèmes de commande de la concaténation de façon fait.

Honnêtement, ce qui semble mieux?

"You have {0} widgets.".Frmt(widgetCount)
"You have " + widgetCount.ToString() + " widgets."
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top