设置对象变量时出现 StackOverflow 异常
StackOverflow Exception when setting object variable
我正在尝试从 sql table 中提取数据,将其写入对象,然后将其放入列表中。
我正在使用 VS2017、C# 和 MS-SQL 2008.
当我 运行 代码时,它从 SQL table 中提取数据;将它转储到一些变量中(我知道这不是最快的,我只是想确认我得到了它们),我实例化对象并尝试设置第一个值,然后我在设置操作中得到堆栈溢出。
为什么设置变量并打印到屏幕上很好,而不是将其放入变量中?
错误;
System.WhosebugException HResult=0x800703E9 Message=Exception
of type 'System.WhosebugException' was thrown.
Class;
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();
这是问题所在:
public String MDWRowNumber { get => MDWRowNumber;
属性 调用自身 - 因此堆栈溢出。
要么使用私有变量,
private string _MDWRowNumber;
public String MDWRowNumber { get => _MDWRowNumber; set => _MDWRowNumber = value; }
或自动 属性
public String MDWRowNumber { get; set; }
在你的class中你有
public String MDWRowNumber { get => MDWRowNumber; set => MDWRowNumber = value; }
你不需要所有这些,它应该只是
public String MDWRowNumber { get; set; }
通过将其自身置于基础变量中,您已经混淆了它。
我正在尝试从 sql table 中提取数据,将其写入对象,然后将其放入列表中。 我正在使用 VS2017、C# 和 MS-SQL 2008.
当我 运行 代码时,它从 SQL table 中提取数据;将它转储到一些变量中(我知道这不是最快的,我只是想确认我得到了它们),我实例化对象并尝试设置第一个值,然后我在设置操作中得到堆栈溢出。
为什么设置变量并打印到屏幕上很好,而不是将其放入变量中?
错误;
System.WhosebugException HResult=0x800703E9 Message=Exception of type 'System.WhosebugException' was thrown.
Class;
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();
这是问题所在:
public String MDWRowNumber { get => MDWRowNumber;
属性 调用自身 - 因此堆栈溢出。
要么使用私有变量,
private string _MDWRowNumber;
public String MDWRowNumber { get => _MDWRowNumber; set => _MDWRowNumber = value; }
或自动 属性
public String MDWRowNumber { get; set; }
在你的class中你有
public String MDWRowNumber { get => MDWRowNumber; set => MDWRowNumber = value; }
你不需要所有这些,它应该只是
public String MDWRowNumber { get; set; }
通过将其自身置于基础变量中,您已经混淆了它。