控制台颜色:同一行中有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");
有没有办法用红色显示苹果,同时保留我最喜欢的水果:蓝色?
是的,可以在同一行上写不同颜色的文本。但是你必须为每种不同的颜色改变前景色。也就是说,如果你想用蓝色写"我最喜欢的水果:",用红色写"苹果",那么你必须做两个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")
);
}