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

Changing console color, gives me a Stackoverflow Exception

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

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

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

An unhandled exception of type 'System.WhosebugException' occurred in mscorlib.dll)

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

您从 WriteUpdatedBookingDetails 方法中调用 WriteUpdatedBookingDetails 方法。

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
    }

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

正如评论中所指出的,您使用相同的 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);
        }

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

当循环循环 lot 次时,您的堆栈会溢出。这就是 WhosebugException 发生的原因。我猜你真的想打电话给

Console.WriteLine (text);

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

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

然后,您的方法将不会调用自身,因此不再递归!