C# 类型为';的未处理异常;System.StackOverflowException';是否在SchoolManagementSystemOOP.dll中发生?

C# 类型为';的未处理异常;System.StackOverflowException';是否在SchoolManagementSystemOOP.dll中发生?,c#,sql,visual-studio,C#,Sql,Visual Studio,我有一个类DBConnectionClass和一些相关的类。 我有一个InsertQueryMethod,如下所示 public string InsertQuery { get { return InsertQuery; } set { InsertQuery = schools.SchoolsInsertQuery + branches.BranchInsertQuery + students

我有一个类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 ";
分支机构和学校班级也有类似的情况。 我得到这个错误:


SchoolManagementSystemOOP.dll中发生类型为“System.StackOverflowException”的未处理异常。在DBConnectionClass中获取{return InsertQuery;}。我的项目中有一个错误。请告诉我发生了什么以及如何处理此异常。

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

public int MyInt {
    get { return MyInt; }
}
返回MyInt
再次调用
MyInt
get
访问器,它尝试
返回MyInt
,它调用
get
accessor…直到堆栈已满

您尚未为变量指定任何实际存储。如果您的get/set中不需要任何特殊行为,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;
    }
}

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

public int MyInt {
    get { return MyInt; }
}
返回MyInt
再次调用
MyInt
get
访问器,它尝试
返回MyInt
,它调用
get
accessor…直到堆栈已满

您尚未为变量指定任何实际存储。如果您的get/set中不需要任何特殊行为,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;
    }
}

我看到堆栈立即溢出。您的setter将导致相同的异常。您知道什么是堆栈溢出,以及属性get/set是如何工作的吗?您使用的属性是错误的。查找有关get/set的一些基本信息以开始:)对不起,您的setter as is不会导致溢出,但它完全错误…我立即看到堆栈溢出。您的setter将导致相同的异常。您知道什么是堆栈溢出,以及属性get/set是如何工作的吗?您使用的属性是错误的。查找一些关于get/set的基本信息以开始:)对不起,您的setter-as-is不会导致溢出,但它是完全错误的……您的代码有问题。具体来说,c#没有
属性
关键字!啊,你说得对。我在C++/CLI领域花了太多时间。已编辑以修复。已使用上述方法删除错误。但同样的错误也发生在我设置对象Schools=newschools()的行中;我知道这个方法并不是完全错误的,它一定有办法奏效。你能给我一个启示吗@Brian A。Henning@MuhammadShahid在我看来,你会从更多的C#学习中受益。花更多的时间试着自己去理解它,然后回到堆栈溢出,如果你再次陷入困境,问更多的问题。你的代码有问题。具体来说,c#没有
属性
关键字!啊,你说得对。我在C++/CLI领域花了太多时间。已编辑以修复。已使用上述方法删除错误。但同样的错误也发生在我设置对象Schools=newschools()的行中;我知道这个方法并不是完全错误的,它一定有办法奏效。你能给我一个启示吗@Brian A。Henning@MuhammadShahid在我看来,你会从更多的C#学习中受益。花更多的时间试着自己去理解它,然后回到堆栈溢出,如果你再次陷入困境,问更多的问题。