我有这个代码:
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 文件只有一行数据。谁能帮我解释一下为什么会这样?
最佳答案
让我们看看:
- 创建一个新的
CsvUserData
对象,调用构造函数。 readCSV(@"C:\userdata.csv");
- 在
readCSV
内部:打开文件,并遍历行。 - 对于每一行:
new CsvUserData { … }
- 转到 1。
因此,您最终从 CsvUserData
类型的构造函数中创建了新的 CsvUserData
对象。所以这将永远重复。
您可能打算将 readCSV
方法设为静态或其他方法,并且只调用它一次。确实没有理由应该从构造函数中调用它。而且构造函数不应该真正打开文件并根据文件创建内容;这对构造函数来说工作量太大了。
关于c# - 对象异常的无限循环stackoverflow列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525982/