填充数组时出现StackoverflowException

Bri*_*ian 4 c#

我通常花时间阅读并尝试回答Excel VBA问题,但我现在正在尝试学习C#.有人可以帮助我理解为什么StackOverflowException我的代码中倒数第二行出错了吗?
我试图通过一种方法填充数组.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = GenerateNumbers();
            Console.WriteLine(numbers);
            Console.ReadKey();
        }
        static int[] GenerateNumbers()
        {
            int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            return GenerateNumbers();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SO *_*ood 10

你混淆了用C#返回函数的奇怪的VBA方式.您将返回无限递归,可以使用以下命令轻松修复:

    static int[] GenerateNumbers()
    {
        int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        return num; //you don't return the function name but a variable
    }
Run Code Online (Sandbox Code Playgroud)


Twa*_*anz 5

堆栈溢出是一种不良情况,在这种情况下,特定计算机程序试图使用比调用堆栈可用的更多内存空间。在编程中,调用栈是一个缓冲区,用来存放需要处理的请求。http://whatis.techtarget.com/definition/stack-overflow

 static int[] GenerateNumbers()
 {
     int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     return GenerateNumbers(); //Here is where the problem happens
 }
Run Code Online (Sandbox Code Playgroud)

问题出在返回部分。你在同一个函数中调用同一个函数,一次又一次地创建一个相同函数的堆栈......你明白了。

将其更改为

return num;
Run Code Online (Sandbox Code Playgroud)