对象的无限循环stackoverflow列表异常

本文关键字:列表 异常 stackoverflow 无限循环 对象 | 更新日期: 2023-09-27 18:03:34

我有这样的代码:

public List<CsvUserData> CsvUserList = new List<CsvUserData>();
public CsvUserData()
{
    readCSV(@"C:'userdata.csv");
}
public string CSVEmailEditText { get; set; }
public string CSVNameEditText { get; set; }
public string CSVAddressEditText { get; set; }
public string CSVPostnumEditText { get; set; }
public string CSVCityEditText { get; set; }
public string CSVPhoneEditText { get; set; }
public string CSVCommentEditText { get; set; }
public string SelectPage { get; set; }
private void readCSV(string location)
{
    var reader = new StreamReader(File.OpenRead(location));
    string line;
    string[] values;
    while (!reader.EndOfStream)
    {
        line = reader.ReadLine();
        values = line.Split(',');
        CsvUserList.Add
        (
            new CsvUserData
            {
                CSVEmailEditText = values[0],
                CSVNameEditText = values[1],
                CSVAddressEditText = values[2],
                CSVPostnumEditText = values[3],
                CSVCityEditText = values[4],
                CSVPhoneEditText = values[5],
            }
        );
    }
}

我试图将csv文件读取到由名为CsvUserData的对象组成的列表中,上面显示了类定义。一旦类实例化,我的程序进入无限循环,最终导致stackoverflow异常,一旦列表内存已满,即使我的csv文件只有一行数据。有人能帮我解释一下为什么会这样吗?

对象的无限循环stackoverflow列表异常

让我们看看:

  1. 创建一个新的CsvUserData对象,调用构造函数
  2. readCSV(@"C:'userdata.csv");
  3. Inside readCSV:打开文件,遍历行。
  4. 每行:new CsvUserData { … }
  5. 转到1
因此,您最终将在CsvUserData类型的构造函数中从创建新的CsvUserData对象。所以这将永远重复。

您可能打算使readCSV方法静态或其他,并且只调用一次。确实没有理由要从构造函数中调用它。构造函数不应该打开一个文件并根据这个文件创建东西;