未处理的类型' System.StackOverflowException'发生在SchoolManagementSystemOOP.dll?

时间:2017-09-21 14:15:25

标签: c# sql visual-studio

我有一个类DBConnectionClass和一些关联的类。 我有一个InsertQueryMethod,如下所示

      public string InsertQuery
    {
        get { return InsertQuery; }
        set { InsertQuery = schools.SchoolsInsertQuery +                         branches.BranchInsertQuery + students.StudentsInsertQuery ; }
    }

类中的关联查询是:

     public string StudentsInsertQuery  = " INSERT INTO AddStudents (FirstName, LastName, PhoneNo, EmailId) VALUES (@FirstName, @LastName, @PhoneNo, @EmailId) ";
    public string StudentsUpdateQuery  = " UPDATE AddStudents SET(FirstName=@FirstName, LastName=@LastName, PhoneNo=@PhoneNo, EmailId=@EmailId) ";
    public string StudentsDeleteQuery  = " DELETE FROM AddStudents ";
    public string StudentsSelectQuery  = " SELECT * FROM AddStudents WHERE Id=@ID ";

类似的案例是分支和学校类。 我收到了这个错误:

未处理的类型' System.StackOverflowException'发生在SchoolManagementSystemOOP.dll中。在DBConnectionClass中获取{return InsertQuery;}。我的项目中有这个错误。请让我了解正在发生的事情以及如何处理此异常。

1 个答案:

答案 0 :(得分:1)

这是无限递归的,会导致堆栈溢出:

public int MyInt {
    get { return MyInt; }
}

return MyInt;再次调用get的{​​{1}}访问者,MyInt尝试return MyInt;,调用get访问者...直到堆栈已满

您尚未为变量指定任何实际存储空间。如果您在获取/设置中不需要任何特殊行为,C#为您提供了一个可爱的快捷方式:

public int MyInt {
    get;
    set;
}

C#将在幕后为该属性创建存储空间。如果您需要特殊行为,则必须声明自己的存储空间。例如:

private int m_my_int;
public int MyInt {
    get {
        // maybe do something
        return m_my_int;
    }
    set {
        // maybe do something
        m_my_int = value;
    }
}