C# 控制台颜色:同一行中超过1个?

C# 控制台颜色:同一行中超过1个?,c#,console,C#,Console,使用: 以及: ColoredConsoleWrite(ConsoleColor.Blue,$“我最喜欢的水果:苹果”) 有没有一种方法可以将苹果显示为红色,同时保留我最喜欢的水果:蓝色?是的,可以在同一行上用不同的颜色书写文本。但是你必须为每种不同的颜色改变前景色。也就是说,如果你想用蓝色写“我最喜欢的水果:”和用红色写“苹果”,那么你必须做两个write操作: public static void ColoredConsoleWrite(ConsoleColor color, string

使用:

以及:

ColoredConsoleWrite(ConsoleColor.Blue,$“我最喜欢的水果:苹果”)


有没有一种方法可以将苹果显示为红色,同时保留我最喜欢的水果:蓝色?

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

public static void ColoredConsoleWrite(ConsoleColor color, string text)
    {
    ConsoleColor originalColor = Console.ForegroundColor;
    Console.ForegroundColor = color;
    Console.Write(text);
    Console.ForegroundColor = originalColor;
}
如果您想通过一个调用实现这一点,那么您需要某种方法在字符串中定义它。NET Framework不提供这样的功能。建造这样的东西是可能的。它将涉及编写一个与所使用的类似的字符串解析器,其中定义占位符,并为其提供值作为参数

也许一种更简单的方法是编写一个方法,该方法获取颜色和字符串对的列表,例如:

var originalColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("My farorite fruit: ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("Apple");
Console.ForegroundColor = originalColor;
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")
    );
}