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

标签 c# list csv 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],
            }
        );
    }
}

我正在尝试将 csv 文件读入包含名为 CsvUserData 的对象的列表中,类定义显示在上方。一旦类被实例化,我的程序就会进入无限循环,一旦列表内存已满,最终会导致 stackoverflow 异常,即使我的 csv 文件只有一行数据。谁能帮我解释一下为什么会这样?

最佳答案

让我们看看:

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

因此,您最终从 CsvUserData 类型的构造函数中创建了新的 CsvUserData 对象。所以这将永远重复。

您可能打算将 readCSV 方法设为静态或其他方法,并且只调用它一次。确实没有理由应该从构造函数中调用它。而且构造函数不应该真正打开文件并根据文件创建内容;这对构造函数来说工作量太大了。

关于c# - 对象异常的无限循环stackoverflow列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525982/

相关文章:

jquery - 使用 jQuery 在每 5 个 <li> 之后添加 </ul><ul>

c# - 如何获取列表的名称

python - _csv.Error : iterator should return strings, not bytes(您是否以文本模式打开文件?)

mysql - 使用awk将csv文件解析为数组

c# - .NET 中的权限/角色框架

c# - Serilog - RollingFile Sink 不根据日期和大小滚动文件

c# - 使用 Web 窗体的 ASP.NET 路由

java.lang.ClassCastException : java. lang.String 无法在 tableau 中转换为 java.lang.Integer?

c# - 同时在网络流上进行多发送和多接收

pandas - pandas 中数据的条件合并和转换