Formatierte Ausgabe mit Parametern wie in C++ (<<)
-
In C++ kann man formatierte Ausgabe ja dank der Manipulatoren in <iostream>/<strstream> sehr einfach mit z. B.:
int h=3, m=5;
cout << "Uhrzeit: " << h << "Stunden und " << m " Minuten << endl;bzw:
char s[100];
strstream sstr = s;
sstr << "Uhrzeit: " << h << "Stunden und " << m " Minuten << endl;sehr komfortabel schreiben (auch die Präzision lässt sich mit diversen Möglichkeiten dabei einstellen)
In C# habe ich da bislang nur
Console.WriteLine("Uhrzeit: {0} Stunden und {1} Minuten\n", m, h);
bzw.
String s = String.Format("Uhrzeit: {0} Stunden und {1} Minuten\n", m, h);
gefunden, was deutlich schwieriger zu lesen ist, vor allem bei vielen Parametern und so richtig altmodisch nach printf()/sprintf() von C aussieht. Gibt es da keine Klassenbibliothek die ähnliches wie in C++ nachbildet. Operator Overloading wird ja von C# unterstützt, sollte also prinzipiell möglich sein.
-
Naja wenn es dich nicht stört dass es etwas weniger performant ist könntest du ja die Stringverkettung mittels ''+' hernehmen.
Damit kann man ja auch strings mit Zahlen und allen Klassen die ToString implementieren verketten, auch ohne ToString direkt aufzurufen.
Ist dann eigentlich fast genau daselbe wie in C++ mit '<<'.
-
johan schrieb:
... was deutlich schwieriger zu lesen ist, vor allem bei vielen Parametern und so richtig altmodisch nach printf()/sprintf() von C aussieht.
Du weisst schon, dass das Problem von printf und sprintf nicht daran liegt, dass diese "alt" sind, sondern dass sie unsicher sind, weil sie einen Überlauf verursachen können? Dieses Problem besteht bei C# nicht. Es ist sogar recht üblich, dass Formattierungen auch heute noch so angegangen wird, also dass man im String angibt, wo und wie eingefügt werden soll.
Für C++ hat man z.B. in Boost etwas nachprogrammiert, was Typsicher ist und somit die Nachteile von printf nicht hat. Siehe Boost.Format.
Zudem wird das mit umfangreichen Formatierungsangaben in jeder Lösung unleserlich.
johan schrieb:
Gibt es da keine Klassenbibliothek die ähnliches wie in C++ nachbildet. Operator Overloading wird ja von C# unterstützt, sollte also prinzipiell möglich sein.
Ist mir nicht bekannt. Wüsste auch nicht, wieso man eine so umfangreiche, bereits zur Verfügung gestellte Formattierungsmöglichkeit nachprogrammieren möchte, nur weil einem die Schnittstelle nicht gefällt. Wer betreibt schon freiwillig einen solchen Aufwand für eigentlich ... nichts?
Grüssli