Was sind die Vor- / Nachteile (falls vorhanden) bei der Verwendung?
string output;
int i = 10;
output = string.Format("the int is {0}", i);
gegen
string output;
int i = 10;
output = "the int is " + i;
Ich habe immer das letztere Beispiel verwendet, aber es scheint, als ob eine gute Mehrheit der Online-Tutorials das Beispiel string.format verwendet. Ich glaube nicht, dass es echte Unterschiede in Bezug auf die Effizienz gibt. Mein erster Gedanke ist, dass ein Codierer die Zeichenfolge nicht ständig brechen muss, um Variablen einzufügen.
Antworten:
Wenn Sie die Übersetzung in Ihrem Projekt für wichtig halten, hilft Ihnen die erste Syntax dabei.
Zum Beispiel können Sie haben:
Beachten Sie auch, dass sich Ihre Variablen mit dieser Syntax möglicherweise nicht immer an derselben Stelle im Satz befinden:
quelle
System.out.println($"{name} is {age} year's old.");
Überprüfen Sie die erste Antwort auf /programming/4671610/why-use-string-format . Es deckt meiner Meinung nach alles ab, warum es besser ist.
Außerdem verfügt jede .NET-Assembly über einen internen Pool, der eine Sammlung eindeutiger Zeichenfolgen enthält. Wenn Ihr Code kompiliert wird, werden alle Zeichenfolgenliterale, auf die Sie in Ihrem Code verweisen, diesem Pool hinzugefügt. Wenn Sie einen Code haben, der so aussieht:
Das macht es 2 Saiten im Pool.
Wenn Sie haben:
"the int is {0} and the double is {1}"
Sie haben nur einen String im Pool.
Es ist etwas komplizierter zu wissen, wann Strings interniert sind und wann nicht, weil der Compiler über einige Informationen verfügt, wenn er Strings erkennt, die manchmal nicht interniert werden müssen ... Lesen Sie zum Beispiel diesen Artikel, der mehr Einblick in diese gibt Angelegenheit.
Bearbeiten: Nach einigem Ausgraben habe ich eine interessante Antwort auf die Frage gefunden. Wann ist es besser, String.Format gegen String-Verkettung zu verwenden? . Kurz gesagt, der Autor der Antwort mit +30 Stimmen spricht sich überzeugend für die Verkettung von Zeichenfolgen aus, wenn die Lokalisierung nicht beteiligt ist.
quelle
Ich bevorzuge den ersten Weg, weil ich so genau sehen kann, wie der String bei der Ausgabe aussehen wird. Es ist sehr leicht zu vergessen, ein Leerzeichen hinzuzufügen oder zusätzlichen Abstand hinzuzufügen, wenn nur Zeichenfolgen angehängt werden.
Ich bin mir sicher, dass der erste Weg auch einen Leistungsvorteil bietet, da keine zusätzlichen Zeichenfolgen erstellt werden müssen. aber das ist nicht mein Hauptanliegen.
quelle
Mit der ersten Option können Sie eine häufig verwendete Formatzeichenfolge speichern, die erforderliche Eingabe reduzieren und die Aktualisierung der Zeichenfolge überall dort vereinfachen, wo sie verwendet wird. Grundsätzlich ermöglicht die erste Option die einfache Implementierung von DRY. Es ist auch eine viel schönere Syntax, wenn mehrere Variablen in einer Zeichenfolge verwendet werden müssen, wie Sie bereits erwähnt haben.
quelle
Ich denke,
string.Format()
es ist einfacher zu sehen, was genau das Ergebnis sein wird (damit Sie keine Probleme mit vergessenen Leerzeichen oder Ähnlichem haben), und es ist auch einfacher zu tippen und zu ändern.Wenn Sie eine sehr einfache Formatierung durchführen möchten, ist die Verwendung des
+
Plus-Operators möglicherweise einfacher, aber ich verwende ihn eher nur, wenn zwei Zeichenfolgen verkettet werden, nicht mehr.Um zu zeigen, wie
string.Format()
sich das Ändern einfacher gestalten lässt, sollten Sie in Ihrem Beispiel am Ende des Satzes einen Punkt hinzufügen: Vonstring.Format("The int is {0}", i)
zu gehenstring.Format("The int is {0}.", i)
ist nur ein Zeichen. Aber von"the int is " + i
zu gehen"the int is " + i + '.'
ist viel mehr.Ein weiterer Vorteil von
string.Format()
ist, dass Sie das zu verwendende Format wie zstring.Format("The int is 0x{0:X}.", i)
. Dies ist umso wichtiger, wenn Sie das Datum formatieren.Was die Effizienz betrifft,
string.Format()
ist es höchstwahrscheinlich langsamer als einfache Zeichenfolgenverkettungen. Aber Code wie dieser befindet sich höchstwahrscheinlich nicht auf einem heißen Pfad, daher spielt es keine Rolle. Und wenn ja, sind Sie wahrscheinlich besser dranStringBuilder
.quelle
Verwenden Sie den Code, der Ihren Code am besten lesbar macht. Mach dir keine Sorgen über die Leistung.
Für Ihr Beispiel unten bevorzuge ich B, weil es nur besser lesbar ist. Aber auch die obigen Sprachübersetzungen sind sinnvoll. Lassen Sie sich nicht von jemandem zwingen, string.Format zu verwenden. Lesen Sie stattdessen Jeff Atwoods hervorragenden Blog über das Theater The Sad Tragedy of Micro Optimizations und verweisen Sie darauf
EIN:
gegen
B:
quelle
Ref: String-Ausgabe: Format oder Concat in C #?
Betrachten Sie diesen Code.
Es ist eine leicht modifizierte Version Ihres Codes.
Das sind meine Ergebnisse:
quelle