为什么会出现StackOverflowException?

问题描述 投票:0回答:1
class Program
{
    static void Main(string[] args)
    {
        //Declare Variables
        string name;
        string breed;
        string colour;
        string gender;
        string userChoice;
        bool proceed;

        //Initialize Variables
        name = "";
        breed = "";
        colour = "";
        gender = "";
        proceed = true;
        numberOfDogs = 0;

        Dogs dogList = new Dogs();

        do
        {
            Console.Write("Main Menu\n");
            Console.WriteLine("--------------------------------------------------------");
            Console.WriteLine("1.   Display the name, breed, colour, and gender of the dog (if one already exists)");
            Console.WriteLine("2.   Add a new dog");
            Console.WriteLine("3.   Edit an existing dog");
            Console.WriteLine("4.   Exit the program");
            userChoice = Console.ReadLine();

            switch (userChoice)
            {
                case "A":
                case "a":
                    {
                        dogList.Display();
                        break;
                    }
                case "B":
                case "b":
                    {
                        Console.Clear();
                        Console.Write("Please enter the dog's name: ");
                        name = Console.ReadLine();
                        Console.Write("Please enter the breed of the dog: ");
                        breed = Console.ReadLine();
                        Console.Write("Please enter the colour of the dog: ");
                        colour = Console.ReadLine();
                        Console.Write("Please enter the dog's gender: ");
                        gender = Console.ReadLine();
                        dogList = new Dogs(name, breed, colour, gender);
                        break;
                    }
                case "C":
                case "c":
                    {
                        dogList.Display();
                        dogList = new Dogs();
                        break;
                    }
                case "D":
                case "d":
                    {
                        proceed = false;
                        break;
                    }
                }
            } while (proceed);
        } 
    }
}

我有另一个正在使用的代码,但我的老师希望我在此设置中使用它。当我运行她的示例时,它说的是同样的话……有人知道问题出在哪里吗?

我已经看了很多遍了,但似乎无法弄清楚。我是编码的初学者,因此有时很难解决问题...我已经通过电子邮件向老师发送了电子邮件,让她知道该示例,但她还没有回复我。如果有人可以帮助我,我将不胜感激!

class Dogs
{
    //Declare Dog Variables
    string name;
    string breed;
    string colour;
    string gender;

    public Dogs()
    {
        name = null;
        breed = null;
        colour = null;
        gender = null;
        Dogs dogList = new Dogs();
    }
    public Dogs(string dogName, string dogBreed, string dogColour, string dogGender)
    {
        name = dogName;
        breed = dogBreed;
        colour = dogColour;
        gender = dogGender;
    }
    public void Display()
    {
        if (name == null || breed == null || colour == null || gender == null)
        {
            Console.Write("No dog record exists");
        }
        else
        {
            Console.WriteLine("The dogs name is: " + name);
            Console.WriteLine("The breed of the dog is: " + breed);
            Console.WriteLine("The colour of the dog is: " + colour);
            Console.WriteLine("The dogs gender is: " + gender);
        }
    }
}

}

c# .net-framework-version
1个回答
0
投票

使用此行代码:

class Dogs
{ 
    public Dogs()
    {
        // ...
        Dogs dogList = new Dogs();
    }
}

您正在创建对同一Dog构造函数的递归调用,该调用将继续进行,直到不再为C#程序分配可用内存为止。

将在这种情况下发生StackOverflow异常。

© www.soinside.com 2019 - 2024. All rights reserved.