首页 > 解决方案 > 设置对象变量时的 StackOverflow 异常

问题描述

我正在尝试从 sql 表中提取数据,将其写入对象,然后将其放入列表中。我正在使用 VS2017、C# 和 MS-SQL 2008。

当我运行代码时,它会从 SQL 表中提取数据;将它转储到一些变量中(我知道这不是最快的,我只是想确认我正在获取它们),我实例化对象并尝试设置第一个值,然后在设置操作中获得堆栈溢出。

为什么可以很好地设置变量并打印到屏幕上,但不能将其放入变量中?

错误;

System.StackOverflowException HResult=0x800703E9 消息=引发了“System.StackOverflowException”类型的异常。

班级;

class Company
{
    public String MDWRowNumber { get => MDWRowNumber; set => MDWRowNumber = value; } //errors here on set => MDWRowNumber = value
    public String MDWIdNumber { get => MDWIdNumber; set => MDWIdNumber = value; }
    public String MDWCompanyName { get => MDWCompanyName; set => MDWCompanyName = value; }
}

主要的;

sql = "SELECT RowNo, Id, Name FROM Company;";
command = new SqlCommand(sql, connection);
reader = command.ExecuteReader();

while (reader.Read())
{
    Console.WriteLine(reader.GetValue(0).ToString());
    Console.WriteLine(reader.GetValue(1).ToString());
    Console.WriteLine(reader.GetValue(2).ToString());

    a = reader.GetValue(0).ToString();
    b = reader.GetValue(1).ToString();
    c = reader.GetValue(2).ToString();

    Console.WriteLine(a + " | " + b + " | " + c); // writes correct values as expected

    Company company = new Company();
    company.MDWRowNumber = a; /////Errors here/////
    company.MDWIdNumber = b;
    company.MDWCompanyName = c;
    //Company company = new Company()
    //    {
    //        MDWRowNumber = reader.GetValue(0).ToString(), ///// without all junk above errors here /////
    //        MDWIdNumber = reader.GetValue(1).ToString(),
    //        MDWCompanyName = reader.GetValue(2).ToString()
    //    };

    CompanyList.Add(company);
}

Console.WriteLine(CompanyList.First().MDWCompanyName);

reader.Close();
command.Dispose();

标签: c#visual-studio-2017stack-overflow

解决方案


这是问题所在:

public String MDWRowNumber { get => MDWRowNumber;

该属性调用自身 - 因此堆栈溢出。

要么使用私有变量,

private string _MDWRowNumber;
public String MDWRowNumber { get => _MDWRowNumber; set => _MDWRowNumber = value; }

或汽车财产

public String MDWRowNumber { get; set; }

推荐阅读