控制台颜色:同一行中有1个以上

本文关键字:一行 1个 颜色 控制台 | 更新日期: 2023-09-27 17:58:19

使用:

public static void ColoredConsoleWrite(ConsoleColor color, string text)
    {
    ConsoleColor originalColor = Console.ForegroundColor;
    Console.ForegroundColor = color;
    Console.Write(text);
    Console.ForegroundColor = originalColor;
}

和:

ColoredConsoleWrite(ConsoleColor.Blue, $"My favorite fruit: Apple");

有没有办法用红色显示苹果,同时保留我最喜欢的水果:蓝色?

控制台颜色:同一行中有1个以上

是的,可以在同一行上写不同颜色的文本。但是你必须为每种不同的颜色改变前景色。也就是说,如果你想用蓝色写"我最喜欢的水果:",用红色写"苹果",那么你必须做两个Write操作:

var originalColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("My farorite fruit: ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("Apple");
Console.ForegroundColor = originalColor;

如果你想用一个调用来实现这一点,那么你需要用某种方法在字符串中定义它。.NET Framework不提供这样的功能。建造这样的东西是可能的。它将涉及编写一个类似于string.Format所使用的字符串解析器,在这里您可以定义占位符,并为其提供值作为参数。

也许一个更简单的方法是编写一个方法,该方法采用颜色和字符串对的列表,比如:

public class ColoredString
{
    public ConsoleColor Color;
    public String Text;
    public ColoredString(ConsoleColor color, string text)
    {
        Color = color;
        Text = text;
    }
}
public static void WriteConsoleColor(params ColoredString[] strings)
{
    var originalColor = Console.ForegroundColor;
    foreach (var str in strings)
    {
        Console.ForegroundColor = str.Color;
        Console.Write(str.Text);
    }
    Console.ForegroundColor = originalColor;
}
public void DoIt()
{
    WriteConsoleColor(
        new ColoredString(ConsoleColor.Blue, "My favorite fruit: "),
        new ColoredString(ConsoleColor.Red, "Apple")
    );
}