无限循环stackoverflow对象列表异常

Dus*_*san 1 c# csv list while-loop

我有这个代码:

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],
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

pok*_*oke 5

让我们来看看:

  1. 创建一个新CsvUserData对象,调用构造函数.
  2. readCSV(@"C:\userdata.csv");
  3. 内部readCSV:打开文件,迭代线.
  4. 对于每一行: new CsvUserData { … }
  5. 转到1.

所以,你最终创建新CsvUserData的对象的的构造CsvUserData类型.所以这将永远重复.

您可能打算将readCSV方法设置为静态或其他内容,并且只调用一次.实际上没有理由从构造函数中调用它.并且构造函数不应该真正打开文件并根据文件创建东西; 这对构造函数来说太过分了.