关于c#:是否可以在.NET中以彩色写入控制台?

Is it possible to write to the console in colour in .NET?

写一个小的命令行工具,用不同的颜色输出会更好。这有可能吗?


对。请参阅本文。下面是一个例子:

1
2
3
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");

enter image description here


1
2
3
4
5
6
7
8
9
10
11
class Program
{
    static void Main()
    {
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("White on blue.");
        Console.WriteLine("Another line.");
        Console.ResetColor();
    }
}

从这里拿走。


上面的评论都是可靠的响应,但是请注意它们不是线程安全的。如果您使用多个线程写入控制台,更改颜色将添加一个竞争条件,该条件可能会创建一些奇怪的输出。但很容易修复:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ConsoleWriter
{
    private static object _MessageLock= new object();

    public void WriteMessage(string message)
    {
        lock (_MessageLock)
        {
            Console.BackgroundColor = ConsoleColor.Red;
            Console.WriteLine(message);
            Console.ResetColor();
        }
    }
}


我创建了一个小插件(在nuget上可用),允许您在控制台输出中添加任何颜色(如果终端支持的话),而不受经典解决方案的限制。

它通过扩展String对象来工作,语法非常简单:

1
"colorize me".Pastel("#1E90FF");

支持前景色和背景色。

enter image description here


是的,这很容易,也很容易摆姿势。定义第一个默认颜色。

1
2
3
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
Console.Clear();

Console.Clear()设置新的控制台颜色很重要。如果不执行此步骤,则在使用Console.ReadLine()请求值时可以看到组合颜色。

然后您可以更改每个打印的颜色:

1
2
3
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Red text over black.");

完成程序后,请记住完成时重置控制台颜色:

1
2
Console.ResetColor();
Console.Clear();

现在对于Netcore,如果您想"保留"用户体验,我们还有另一个问题,因为终端在每个操作系统上有不同的颜色。

我正在制作一个库,用文本格式来解决这个问题:颜色、对齐方式等等。自由使用和贡献。

https://github.com/deinsoftware/colorify/也可以作为nuget包提供

Windows/Linux的颜色(深色):enter image description here

MacOS颜色(浅色):enter image description here


是的,可能如下。这些颜色可以在控制台应用程序中查看一些红色等错误。

1
2
3
4
5
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;//after this line every text will be white on blue background
Console.WriteLine("White on blue.");
Console.WriteLine("Another line.");
Console.ResetColor();//reset to the defoult colour