我使用以下方法在控制台上以不同颜色打印一些文本。
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 - -");
...
}
}
答案 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);
}