如何在控制台应用程序中的 Console.WriteLine 中为不同颜色的单词着色?

Rom*_*eyn 5 c# console-application

我的代码的最后一句是Console.WriteLine带有变量的。我希望将变量之间的文本设置""为绿色,将变量设置为红色。

我一直在尝试Console.Foregroundcolor,但这并不成功。

Console.WriteLine("What is your name?");
string name = Console.ReadLine();
Console.WriteLine("Your name is {0}.", name);
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

Cai*_*ard 5

对 currarpickt 的答案略有改进:

public void Write(params object[] oo)
{
  foreach(var o in oo)
    if(o == null)
      Console.ResetColor();
    else if(o is ConsoleColor)
      Console.ForegroundColor = o as ConsoleColor;
    else
      Console.Write(o.ToString());
}
Run Code Online (Sandbox Code Playgroud)

现在您可以混合任意数量的文本和颜色:

 Write("how about ", ConsoleColor.Red, "red", null, " text or how about ", ConsoleColor.Green, "green", null, " text");
Run Code Online (Sandbox Code Playgroud)

使用 null 会将颜色恢复为默认值

或者我们构建一个解析器怎么样:

public void Write(string msg)
{
  string[] ss = msg.Split('{','}');
  ConsoleColor c;
  foreach(var s in ss)
    if(s.StartsWith("/"))
      Console.ResetColor();
    else if(s.StartsWith("=") && Enum.TryParse(s.Substring(1), out c))
      Console.ForegroundColor = c;
    else
      Console.Write(s);
}
Run Code Online (Sandbox Code Playgroud)

我们可以这样使用:

Write("how about {=Red}this in red{/} or this in {=Green}green{/} eh?");
Run Code Online (Sandbox Code Playgroud)

应该收拾东西。不过,这是一个非常简单、不复杂的解析器,如果您的字符串包含 { 或 },则需要改进它


小智 1

如果你想为控制台上的每个文本设置不同的颜色,你应该在控制台中的每个输入和输出之前编写 Console.BackgrundColor 和 Console.ForeGroundColor 。例如:

        Console.BackgroundColor = ConsoleColor.Yellow;
        Console.ForegroundColor = ConsoleColor.Red;

        Console.WriteLine("Enter your name:");

        string name = Console.ReadLine();

        Console.BackgroundColor = ConsoleColor.Green;
        Console.ForegroundColor = ConsoleColor.Yellow;

        Console.WriteLine("Hello, " + name);

        Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)