Laden...

Strings zusammenbauen/formatieren: Unterschied zwischen verschiedenen Möglichkeiten

Erstellt von C#ler vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.756 Views
C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 12 Jahren
Strings zusammenbauen/formatieren: Unterschied zwischen verschiedenen Möglichkeiten

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

3.170 Beiträge seit 2006
vor 12 Jahren

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

5.742 Beiträge seit 2007
vor 12 Jahren

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);

C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 12 Jahren

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

1.820 Beiträge seit 2005
vor 12 Jahren

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 🙁