Frage

In meinen frühen Programmierung Tagen .Net, habe ich string.Format () nur für komplexen Zeichenfolge Verkettungen, zum Beispiel Strings als

zu kompilieren

Problem mit Kundenauftrag 234 Datum 2002.02.02 und Zahlung ID 55543.

Aber jetzt verwende ich string.Format für fast jeden String-Verkettung ich zu tun haben, auch einfache, wie eine Zeichenfolge mit etwas prefixing.

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

Gibt es einen möglichen Überkopf dazu? Vielleicht sollte ich mal die regelmäßige + Operator verwenden, um diese einfachen Operationen zu tun?

Was ist Ihre Meinung dazu?

War es hilfreich?

Lösung

Für einfache Zeichenfolge Verkettungen verwenden, um den + Ansatz. Es ist klarer für einfache Dinge, die nicht tun ein Format benötigen.

Für komplexere Strings, die ein bestimmtes Format haben und wo es sinnvoll, die Struktur des gesamten Strings zu erhalten und einen Platzhalter für die Eingabe, Verwendung String.Format liefern.

Und ja, es ist ein Overhead. String.Format verwendet einen String unter der Decke. Einfache String Verkettungen werden viel schneller in diesen Szenarien. Ein paar Benchmarks und Blog-Posts zu diesem Thema kann ganz einfach zu finden. Natürlich ist es hängt alles von Ihrer Nutzung. Wenn kleiner String concats in einer Schleife auftritt, wird dann die wiederholte Verwendung von String.Format wird wahrscheinlich stärker bemerkbar als eine einfache + concat. Wenn Sie den Aufbau ein großen string in einer Schleife dann das klassische Beispiel ist StringBuilder und damit verbundene Fragen auf concat- bevorzugt im Vergleich zu Stringbuilder kann auf SO gefunden werden.

EDIT: Um zu klären, dient dieser kleinen Zweck: String.Format("{0}{1}", a, b) da gibt es nicht viel zu formatieren. Es ist einfach a + b. Leider, wie ich bin gekommen, über solche Beispiele in Code Produktion und so bald sehe ich String.Format erwarte ich etwas zu sehen, dass der Bedarf auf eine bestimmte Weise strukturiert werden, keine einfache concat.

OTOH, betrachten Sie diese Telefonnummer: "(" + area + ") " + number + " x" + extension - auch dort ist viel los und es ist nicht leicht zu ändern. In diesem Fall wird ein String.Format ist vorzuziehen: String.Format("({0}) {1} x{2}", area, number, extension). Dies ist immer noch ein triviales Beispiel, aber Sie bekommen die Idee.

Andere Tipps

Ich neige dazu, auch auf dem Einsatz string.Format auf den meist Betrieb, die brauchen zwei oder mehr Strings / Werte kombiniert werden, da es einfacher produziert Code zu lesen, als das Starten und Strings mit + 's in der Mitte zu stoppen.

Zur Erweiterung

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

ist viel besser lesbar und erweiterbar als

string value = "Hello" + user.username

zum Beispiel, wenn Sie das Datum der letzten Anmeldung als ein System-Upgrade hinzufügen möchten, können Sie einfach den Code in das folgende

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

Einfache Verkettung ist effizienter für einfache Dinge. Verwenden String.Format() für wenn die Dinge komplizierter und es macht den Code leichter zu lesen.

ich persönlich das gleiche tun (solange die Funktion Ich rufe die Formatierung für mich nicht verarbeitet).


Clarrification

Für die regelmäßige String-Verkettung wie "Hello " + "World!"; ich einen Stringbuilder verwenden würde. Ihr Beispiel formatiert die Zeichenfolge für die Ausgabe durch das Voranstellen von zwei Registerkarten ..., die ich mehr berücksichtigen wie die Formatierung.

Es gibt einen Unterschied zwischen der Formatierung und Verkettung ... vorsichtig sein, was Sie für die Verwendung.


String.Format() verwendet einen String intern so die Verkettung effizienter sein wird als ohnehin regelmäßig String-Verkettung zu tun.

Stellen Sie Ihr Beispiel ändern, da Console.WriteLine() die Formatierung selbst (keine String.Format() erforderlich) verarbeiten kann:

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

Meine Regel ist, wenn ich die + verwenden (Verkettung) mehr als einmal ich es zu einem string.Format ändern.

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

Ich weiß nicht, über die Leistung, jemand wird wahrscheinlich, dass Daten zur Verfügung stellen, aber mein Gefühl ist, dass String.Format ist der Weg zu gehen, wenn Sie die Formatzeichenfolge in Ihrer Konfigurationsdatei (oder Datenbankfeld oder Ressourcendatei setzen wollen oder Wasauchimmer). Auf diese Weise, wenn Sie die Anzahl der Tabulatoren, Schalter auf Räume optimieren möchten, fügen Sie Trennzeichen, oder was auch immer, Sie müssen nicht neu kompiliert werden.

Ich neige dazu, String.Concat zu verwenden, anstatt String.Format wenn ich brauche nur zu Präfix oder eine bestimmte Zeichenkette Suffix. Ich ziehe den expliziten Aufruf der Concatmethod dann den + Operator zu verwenden, und wenn Sie bereits String.Format verwenden es ist nur eine Frage einen Tastendruck zu wechseln.

IIRC, wird die String.Concat Methode das gleiche sein wie mit dem Operator so ist es auch schneller sein als String.Format.

Ich benutze Format fast immer, obwohl ich eine Erweiterungsmethode statt der statischen String-Methode verwenden. Ich finde es einfacher zu verstehen, einfacher zu ändern, und in der Regel leichter zu pflegen. Es kann auch die Lokalisierung leichter machen, weil es nicht Ordnung Probleme einführt die Art und Weise Verkettung der Fall ist.

Ehrlich gesagt, das sieht besser aus?

"You have {0} widgets.".Frmt(widgetCount)
"You have " + widgetCount.ToString() + " widgets."
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top