改变控制台颜色,给我一个 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);
}
然后,您的方法将不会调用自身,因此不再递归!
我使用以下方法在控制台上以不同颜色打印一些文本。
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);
}
然后,您的方法将不会调用自身,因此不再递归!