2015-09-04 34 views
4

我已經此Console技術功能,單聲道C#奇怪控制檯顏色

public static void Ask(string message) 
{ 
    ConsoleColor previousColor = Console.ForegroundColor; 
    Console.ForegroundColor = ConsoleColor.White; 
    Console.Write (message); 
    Console.Write (" : "); 
    Console.ForegroundColor = previousColor; 
} 

這是我的Main()

Console.WriteLine("Hello World"); 
Ask("Roll No"); 

印刷兩個white顏色不相同,如下面的

Screenshot

在d ebugger,我可以看到previousColor也是ConsoleColor.White

+0

這並不罕見(您可以使用xterm和rxvt獲得相同的效果)。 –

回答

3

這是偶爾會導致混淆的區域。稱之爲限制而不是缺陷。

有兩個因素有關:

其實現彩色在X這樣做,因爲xterm和rxvt的自1990年代中期以來已經做了
  1. 最終端:終端原本能有默認指定了前景色和背景色,以及稍後添加了ANSI(和擴展)顏色。與Linux控制檯不同,不保證顏色與顏色有關。

    VTE(終端的功能部分)遵循該設計,與Konsole一樣。

    從xterm中的的reverseVideomanual描述引用表明,有用於終端ANSI顏色和默認顏色之間的區分:

 
       Other control sequences can alter the foreground and background 
       colors which are used: 

       o Programs can also use the ANSI color control sequences to 
        set the foreground and background colors. 

       o Extensions to the ANSI color controls (such as 16-, 88- or 
        256-colors) are treated similarly to the ANSI control. 

       o Using other control sequences (the "dynamic colors" fea- 
        ture), a program can change the foreground and background 
        colors. 
  • Mono Console是爲模仿(以及在某些部分,改編)ncurses塊而編寫的。 ncurses FAQ Ncurses resets my colors to white/black指出,ncurses假定默認顏色是黑色的白色— Console也遵循該設計。

    它可能跟着ncurses進一步瞭解通過告訴終端繪製白色文本與隱含的「白色」(通過將顏色重置爲默認值)完成的顯式「白色」之間的區別。 。

  • +1

    最近,我從Windows上的.NET轉移到了Ubuntu上的Mono。感謝您的解釋! –