【问题标题】:Changing console color, gives me a Stackoverflow Exception更改控制台颜色,给我一个 Stackoverflow 异常
【发布时间】:2015-09-30 04:50:32
【问题描述】:

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

        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 - -"); 
            ...
            }
        }

【问题讨论】:

  • 不,在调试模式下,第二次调用该方法时出现异常
  • 但是您使用相同的text 参数一次又一次地调用WriteUpdatedBookingDetails()
  • @GrantWinney:哦!这是一个愚蠢的错误。你是对的。
  • @KushanRandima 我已经编辑了您的帖子(包括用于普通问题的代码不是一个好主意,但由于这可能会作为印刷错误消失,因此显示MVCE 看起来不错)。请考虑将来的问题以提供 minimal 示例 - 确实不需要添加您拥有的额外代码。还要避免与您的问题无关的所有类型的“谢谢”/“这里的新”/“搜索了很多”文本。 (随时回滚/改进)。
  • 第一个指出异常没有积分! :/ @GrantWinney 你为什么要删除你的答案?

标签: c# visual-studio-2013 console console-application console.writeline


【解决方案1】:

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

当循环循环很多次时,你的堆栈就会溢出。这就是出现StackOverflowException 的原因。我猜你真的想打电话

Console.WriteLine (text);

你的方法应该是这样的:

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

然后,你的方法不会调用自己,所以不再递归!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在下面的函数中

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-05-05
          • 1970-01-01
          • 2020-02-10
          • 2016-03-04
          • 2013-06-27
          • 2015-05-01
          • 1970-01-01
          • 2011-09-21
          • 2011-08-11
          相关资源
          最近更新 更多