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

本文关键字:一个 Stackoverflow 异常 颜色 控制台 改变 | 更新日期: 2023-09-27 18:15:17

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

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

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

类型为"System"的未处理异常。StackOverflowException' occurred in mscorlib.dll)

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

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

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

当循环循环很多次时,堆栈溢出。这就是StackOverflowException发生的原因。我猜你实际上是想调用

Console.WriteLine (text);

你的方法应该是这样的:

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

那么,你的方法将不会调用自己,所以没有更多的递归!

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

使用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);
        }

下面的函数

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

再次不带任何条件地调用相同的函数。一旦被调用,它就在无限循环中运行。这就是为什么你会得到这个错误

从WriteUpdatedBookingDetails方法中调用WriteUpdatedBookingDetails方法

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