改变控制台颜色,给我一个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 - -");
...
}
}
你的问题是你使用了递归。当您调用此方法时,前景首先被设置为深绿色。但是正如您在这里看到的,您再次调用了相同的方法!这形成了一个无限循环!
当循环循环很多次时,堆栈溢出。这就是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);
}