【问题标题】:How to produce a StackOverflowException with a few lines of code?如何用几行代码生成 StackOverflowException?
【发布时间】:2011-05-27 05:19:31
【问题描述】:

如何用最少的代码行生成StackOverflowException

【问题讨论】:

标签: c# .net stack-overflow


【解决方案1】:
throw new StackOverflowException();

作弊,我知道... :)

【讨论】:

  • 这是生成任何类型的测试异常的最简单方法
  • Jajaja...我在想一些“更详细”的东西,但它也有效..
  • @kinjal 对于这个特定的异常,它很难测试——你无法捕获 StackOverflowException。
  • @chibacity: try { throw new StackOverflowException(); } catch (StackOverflowException ex) { Console.WriteLine("Yes you can."); }(抱歉,我知道它已经过时了:)
  • @BoltClock 好吧,我会被吓到的。你说得很对。只有当它是通过操作系统生成的并且它被视为厄运的例外,即应用程序扁平化器时,它才必须是。
【解决方案2】:

像这样:

A() { new A(); }

【讨论】:

  • 一行,但字符更少,并产生 real 异常...+1(在 C# 中不需要 void 返回吗?)
  • @BoltClock:这是一个构造函数。
  • 嗯,好的。我看到你刚刚添加了new
  • 同意,你能解释一下这里发生的事情吗,我是 .net 和所有这些行话的新手。
  • @aGuy:它是一个调用自身的构造函数。稍长但更清晰的版本是int A() { return A(); }
【解决方案3】:

伪代码

func(): call func()

【讨论】:

    【解决方案4】:
    public int Method(int i)
    {
      return i + Method(i + 1);
    }
    

    我认为这应该可行。一般来说,任何不会终止的递归。

    【讨论】:

      【解决方案5】:
      public static void Main()
      {
        Main();
      }
      

      【讨论】:

        【解决方案6】:

        我总是使用这个代码(因为它更难检测):-(

        private int _num;
        public int Num {
           get { return Num; }
           set { _num = value; }
        }
        

        【讨论】:

        • 如果字段名是num(不带下划线前缀)就更好了。 ;)
        【解决方案7】:

        不是最短的,但很有趣:)

        public static bool IsNotEmpty(string value)
        {
            return !IsEmpty(value);
        }
        
        public static bool IsEmpty(string value)
        {
            return !IsNotEmpty(value);
        }
        
        public static void Main()
        {
            bool empty = IsEmpty("Hello World");
        }
        

        【讨论】:

          【解决方案8】:

          运行这段代码(递归):

          f () {
                 f();
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-18
            • 1970-01-01
            • 2017-12-08
            • 2012-10-03
            • 2015-08-08
            • 2022-01-19
            • 2020-06-10
            • 1970-01-01
            相关资源
            最近更新 更多