Einzelne Buchstaben färben in C#?

... komplette Frage anzeigen

1 Antwort

Ich mach's mal für die erste Zeile.

/* In normaler Farbe schreiben */
System.Console.Write("Die Fläche des Quadrates beträgt ")

/* Bisherige Farbe speichern und neue Farbe (hier: rot) setzen. */
System.ConsoleColor originalColor = System.Console.ForegroundColor;
System.Console.ForegroundColor = System.ConsoleColor.Red;

/* Das Ergebnis "richtig" in einen String umwandeln und ausgeben. (Das Verhalten der Default-Umwandlung ist von der Betriebssystemsprache abhängig, was man in der Regel *NICHT* möchte!) */
String quadratstring = quadratergebnis.ToString(System.Globalization.CultureInfo.InvariantCulture);
System.Console.Write(quadratstring);

/* "Alte" Farbe wiederherstellen und den Rest schreiben. */
System.Console.ForeGroundColor = originalColor;
System.Console.Write(" m².");

Ich hab das jetzt nicht getestet, aber wenn das nicht funktioniert, dann ist es vermutlich überhaupt nicht möglich.

Das mit der "Sprachabhängigkeit per Default" ist übrigens eines der größten "Probleme" von .NET. Ich sehe es als eine enorme Fehlerquelle, weil viele Entwickler sich dessen vermutlich nicht bewusst sind.

In die andere Richtung gilt übrigens das selbe. In der Regel möchte man ...

int i = System.Int32.Parse(someString, System.Globalization.CultureInfo.InvariantCulture)

... anstatt ...

int i = System.Int32.Parse(someString);

Hier wird implizit etwas gemacht, das meines Erachtens nur dann passieren sollte, wenn der Entwickler es auch tatsächlich möchte (und somit bewusst hinschreibt).

Microsoft hat das leider umgedreht. Wenn man etwas (nämlich sprachabhängige Umwandlung) nicht möchte, muss man einen optionalen Parameter angeben. Das ist meines Erachtens extrem schlechtes API-Design. Zumindest sollte man sich als Entwickler darüber bewusst sein, weil man sonst plötzlich Code schreibt, der sich auf anderen Systemen plötzlich anders verhält und z. B. eine Datei, die auf einem System erzeugt wurde, auf einem anderen nicht mehr lesen kann oder auf einem System eine Eingabe akzeptiert und auf einem anderen nicht.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von NoHumanBeing
24.05.2016, 10:29

Errata:

Bitte noch ein paar Semikolons "einstreuen", die ich offensichtlich vergessen habe. (In der zweiten Zeile der ersten Box und in der zweiten Box.)

Und "string" bitte klein schreiben.

Und "ForegroundColor", nicht "ForeGroundColor".

;-)

1
Kommentar von Asonger
24.05.2016, 10:31

Vielen Dank für diese ausführliche Antwort!

Ich werde mal schauen.

Grüße.

1

Was möchtest Du wissen?