Вы можете использовать библиотеку CsConsoleFormat † для форматирования вывода консоли в цвета.
Вот как будет выглядеть ваш код:
using static System.ConsoleColor;
ConsoleRenderer.RenderDocument(new Document().AddChildren(
new Span(">>> Order: ") { Color = Cyan },
new Span("Data") { Color = Gray },
new Span("Parity") { Color = DarkGreen },
new Span(" <<<") { Color = Cyan }
));
или, альтернативно:
ConsoleRenderer.RenderDocument(new Document().AddChildren(
new Span { Color = Cyan }.AddChildren(
">>> Order: ",
new Span("Data") { Color = Gray },
new Span("Parity") { Color = DarkGreen },
" <<<"
)
));
или с кодом помощника (см. Ниже):
ColoredSpans.Render(">>> Order: ".Cyan(), "Data".Gray(), "Parity".DarkGreen(), " <<<".Cyan());
Два верхних метода, хотя и не очень добросовестны, имеют много преимуществ:
- Обеспечение ясности намерений и поддержка иерархии, например, дочерние промежутки, добавленные в родительский промежуток, будут наследовать цвета родителя.
- В отличие от
ColoredConsoleWrite
вспомогательного метода, создайте полный документ, который можно отрегулировать целиком (например, перенос слов, фон).
- Не полагайтесь на концепцию «обратного цвета консоли», которая является чуждой разработчикам .NET для Windows, для установки цвета фона.
Если вам нужен более сознательный код (например, вы пишете много отформатированных абзацев со многими выделенными словами), вы можете использовать эту коллекцию вспомогательных методов, вдохновленных Edokan.KaiZen.Colors, для написания кода, как в 3-м пример выше:
public static class Spans
{
public static Span Black(this string text) => new Span(text) { Color = ConsoleColor.Black };
public static Span DarkBlue(this string text) => new Span(text) { Color = ConsoleColor.DarkBlue };
public static Span DarkGreen(this string text) => new Span(text) { Color = ConsoleColor.DarkGreen };
public static Span DarkCyan(this string text) => new Span(text) { Color = ConsoleColor.DarkCyan };
public static Span DarkRed(this string text) => new Span(text) { Color = ConsoleColor.DarkRed };
public static Span DarkMagenta(this string text) => new Span(text) { Color = ConsoleColor.DarkMagenta };
public static Span DarkYellow(this string text) => new Span(text) { Color = ConsoleColor.DarkYellow };
public static Span Gray(this string text) => new Span(text) { Color = ConsoleColor.Gray };
public static Span DarkGray(this string text) => new Span(text) { Color = ConsoleColor.DarkGray };
public static Span Blue(this string text) => new Span(text) { Color = ConsoleColor.Blue };
public static Span Green(this string text) => new Span(text) { Color = ConsoleColor.Green };
public static Span Cyan(this string text) => new Span(text) { Color = ConsoleColor.Cyan };
public static Span Red(this string text) => new Span(text) { Color = ConsoleColor.Red };
public static Span Magenta(this string text) => new Span(text) { Color = ConsoleColor.Magenta };
public static Span Yellow(this string text) => new Span(text) { Color = ConsoleColor.Yellow };
public static Span White(this string text) => new Span(text) { Color = ConsoleColor.White };
public static void Render(object[] elements) => ConsoleRenderer.RenderDocument(new Document().AddChildren(elements));
}
† CsConsoleFormat был разработан мной.