Hallo,
ich frage mich seit längerer Zeit, warum in Dokus, wie z.B. :rtfm: und 🛈 folgende Angabe für strings gemacht wird:
Console.WriteLine("Eingabe: {0}", value);
Ich verwende aber (wie ich es gelernt habe):
Console.WriteLine("Eingabe: " + value);
Was ist der Unterschied zwischen diesen beiden Varianten?
Welche ist "besser"?
Gruß,
C#ler
In theory, there is no difference between theory and practice. But, in practice, there is.
The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon
Hallo,
der Unterschied sollte aus der Überladungsliste von Console.WriteLine hervorgehen. Die erste von Dir angesprochene Variante arbeitet ähnlich wie String.Format
, und kann innerhalb des Strings verschiedene Variablen ersetzen. Das aht vor allem dann Sinn, wenn man Variablen nicht am Ende, sonder in der Mitte eines Strings ausgeben will, oder mehrere Variablen ersetzen will, und keine endlos lange Verkettung mit + schreiben will.
Besonders wertvoll ist sie aber, wenn der Ausgabe-String bereits als Variable vorliegt, denn da würdest Du sonst nix dazwischenkriegen:
string output = "Der Wert von {0} ist {1}!";
Console.WriteLine(output, varName, varValue);
// der Ausdruch macht das Gleiche wie
Console.WriteLine(String.Format(output, varName, varValue));
Dabei könnte output z.B. von aussen als Variable übergeben werden, oder immer wieder benutzt werden um mit verschiedenen Variablen die Ausgabe zu erzeugen.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo C#ler,
wirklich "besser" ist keine von beiden - letztlich ist es eine Stilfrage.
Aber ein paar Anregungen zur Entscheidung, wann man welche verwendet:
Die letztgenannte Variante ist vor allem eins: Einfach.
Ich verwende sie insbesondere bei konstanten, zur Compilezeit bekannten Strings
Console.WriteLine("Hallo Welt, dies ist ein sehr, sehr, sehr, sehr, sehr, sehr" +
", sehr, sehr, sehr, sehr, sehr langer Text");
Allerdings wird es bei der Verwendung dieser Variante schnell unübersichtlich - insbesondere mit Anführungszeichen, Leerzeichen etc.:
Console.WriteLine("Hallo " + name + ". Sie haben \"" + input + "\" gesagt."
Da ist dann die erste Variante deutlich lesbarer:
Console.WriteLine("Hallo {0}. Sie haben \"{1}\" gesagt.", name, input);
Auch, wenn man eine Zeichenfolge mehrfach verwenden möchte, hat erstere Variante Vorteile:
Console.WriteLine("Dies ist ein {0}. Wirklich? Ja, dies ist ein {0}.", test);
Nicht zuletzt gibt es auch Vorteile bei der Internationalisierung der Anwendung (wobei da ein Formatstring schon fast nicht mehr ausreicht) - je nach Sprache kann die Wortreihenfolge durchaus unterschiedlich sein:
Console.WriteLine("Es wurden {0} von {1} Items ausgewählt ({2} nicht ausgewählt)", selectedCount, totalCount, totalCount - selectedCount);
Außerdem ermöglichen Formatstrings auch Zahlenformatierungen:
Console.WriteLine("Hex: {0:X}, Wissenschaftlich: {0:e}, Währung: {0:c}");
BTW: Außerhalb der Console Klasse kann man zur Stringformatierung die String.Format Methode verwenden:
string result = String.Format("Hallo {0}.", world);
Hallo,
danke für die Hilfe - ich denke, ich muss dann wohl selbst je nach Situation entscheiden 😉.
Gruß, C#ler
In theory, there is no difference between theory and practice. But, in practice, there is.
The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon
Hallo!
Ich verwende nach Möglichkeit die Variante mit den Platzhaltern.
Ich habe mir das anfangs bei mehrsprachigen Anwendungen angewöhnt und hab' bisher auch noch keine Nachteile feststellen können.
Persönlich sinde ich diese Variante auch flexibler und übersichtlicher.
Nobody is perfect. I'm sad, i'm not nobody 🙁