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

时间:2016-07-22 01:48:00

标签: c# console

使用:

if Reachability.isConnectedToNetwork() == false
{
      // internet is down
      let error = NSError(domain: "", code: 3, userInfo: nil)           let alertView = createDefaultAlertError(error.code)
      let tryAgainAction = UIAlertAction(title: ClassGeneralMessages().userMessageTryAgain, style: UIAlertActionStyle.Default) { (UIAlertAction) in                
}
else
{
     // internet is ok
     // run more code here
}

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

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

1 个答案:

答案 0 :(得分:5)

是的,可以在同一行上以不同颜色书写文字。但是你必须改变每种不同颜色的前景色。也就是说,如果你想用蓝色写“我最喜欢的水果:”,用红色写“苹果”,那么你必须做两次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")
    );
}