C# 填充数组时的StackoverflowException

C# 填充数组时的StackoverflowException,c#,C#,我通常花时间阅读并尝试回答Excel VBA问题,但我现在正在尝试学习C#。有人能帮我理解为什么代码中倒数第二行出现StackOverflowException错误吗? 我试图通过一个方法填充数组 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int[] numbers = GenerateNumbers()

我通常花时间阅读并尝试回答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();
        }
    }
}

您将奇怪的VBA返回函数的方式与C#混淆了。您返回的是一个无限递归,可以使用以下方法轻松修复:

    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
    }
堆栈溢出是一种不希望出现的情况,在这种情况下,特定的 计算机程序试图使用比调用堆栈更多的内存空间 有空的。在编程中,调用堆栈是一个存储 需要处理的请求

问题在于返回部分。您正在同一函数中调用同一函数,并一次又一次地创建同一函数的堆栈。。。你明白了

换成

return num;

通过在函数末尾调用
return GenerateNumbers()
,可以无限地反复运行该函数,因为无法中断递归,从而导致堆栈溢出。您应该改为使用
return num

这是您的基本操作:

void Main() 
{
    FlipPage();
}

void FlipPage()
{
    FlipPage();
}

所以像那个金发女郎一样,你一直在翻页

你怎么想
return GenerateNumbers()是什么?要纠正误解,这一点很重要。提示:无限递归使用
returnnum或仅<代码>数字=可枚举范围(1,10)我现在明白了。这是有道理的。非常感谢@黑手党谢谢你的提醒。我已经编辑了答案。
void Main() 
{
    FlipPage();
}

void FlipPage()
{
    FlipPage();
}