更改控制台颜色,给我一个Stackoverflow异常

时间:2015-09-30 04:50:33

标签: c# visual-studio-2013 console console-application console.writeline

我使用以下方法在控制台上以不同颜色打印一些文本。

        private static void WriteUpdatedBookingDetails(string text)
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            WriteUpdatedBookingDetails(text);
        }

当我从下面的代码执行WriteUpdatedBookingDetails()方法时,它给了我一个异常

  

mscorlib.dll中出现未处理的“System.StackOverflowException”类型异常

        static void Main(string[] args)
        {
            ...
            // Exception occurred when I call this method. 
            WriteUpdatedBookingDetails("\n- - Reconciling Updated Bookings - -"); 
            ...
            }
        }

4 个答案:

答案 0 :(得分:4)

您的问题是您使用了递归。调用此方法时,前景首先设置为深绿色。但正如你在这里看到的,你再次调用相同的方法!这形成了一个无限循环!

当循环循环 lot 次时,堆栈溢出。这就是StackOverflowException发生的原因。我猜你其实想打电话

Console.WriteLine (text);

所以这就是你的方法应该是这样的:

private static void WriteUpdatedBookingDetails(string text)
{
    Console.ForegroundColor = ConsoleColor.DarkGreen;
    Console.WriteLine(text);
}

然后,你的方法不会调用自己,所以不再递归!

答案 1 :(得分:2)

正如评论中指出的那样,您使用相同的WriteUpdatedBookingDetails()参数一次又一次地调用text,从而导致无限递归。

使用Console.WriteLine()text打印到控制台:

        /// <summary>
        /// Write Updated Booking Details on Console
        /// </summary>
        /// <param name="text"></param>
        private static void WriteUpdatedBookingDetails(string text)
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WriteLine(text);
        }

答案 2 :(得分:1)

在以下函数中

private static void WriteUpdatedBookingDetails(string text)
    {
        Console.ForegroundColor = ConsoleColor.DarkGreen;
        WriteUpdatedBookingDetails(text);   //<<<<< here runs the infinite loop
    }

你再次无条件地调用相同的函数。一旦被调用,它就会以无限循环运行。这就是您收到此错误的原因

答案 3 :(得分:0)

从WriteUpdatedBookingDetails方法中调用WriteUpdatedBookingDetails方法。

private static void WriteUpdatedBookingDetails(string text)
    {
        Console.ForegroundColor = ConsoleColor.DarkGreen;
        Console.WriteLine(text);
    }