C# 无限循环堆栈溢出对象列表异常
我有以下代码:C# 无限循环堆栈溢出对象列表异常,c#,list,csv,while-loop,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 CSV
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],
}
);
}
}
public List CsvUserList=new List();
公共CsvUserData()
{
readCSV(@“C:\userdata.csv”);
}
公共字符串CSVEmailEditText{get;set;}
公共字符串CSVNameEditText{get;set;}
公共字符串CSVAddressEditText{get;set;}
公共字符串CSVPostnumEditText{get;set;}
公共字符串CSVCityEditText{get;set;}
公共字符串csvphoneeditext{get;set;}
公共字符串CSVCommentEditText{get;set;}
公共字符串SelectPage{get;set;}
私有void readCSV(字符串位置)
{
var reader=newstreamreader(File.OpenRead(location));
弦线;
字符串[]值;
而(!reader.EndOfStream)
{
line=reader.ReadLine();
值=行分割(',');
CsvUserList.Add
(
新的CSVuser数据
{
CSVEmailEditText=值[0],
CSVNameEditText=值[1],
CSVAddressEditText=值[2],
CSVPostnumEditText=值[3],
CSVCityEditText=值[4],
CSVPhoneEditText=值[5],
}
);
}
}
我正在尝试将csv
文件读入由名为CsvUserData
的对象组成的列表,上面显示了类定义。一旦类被实例化,我的程序就会进入无限循环,最终导致列表内存满时出现stackoverflow
异常,即使我的csv文件只有一行数据。有人能帮我解释一下为什么会这样吗?让我们看看:
CsvUserData
对象,调用构造函数readCSV(@“C:\userdata.csv”)代码>
readCSV
:打开文件,并在行上迭代new CsvUserData{…}
CsvUserData
类型的构造函数中创建新的CsvUserData
对象。所以这将永远重复
您可能打算将readCSV
方法设置为静态或其他方式,并且只调用它一次。实际上没有理由从构造函数调用它。构造函数不应该真正打开一个文件并基于该文件创建内容;这对一个构造器来说太多了。让我们看看:
CsvUserData
对象,调用构造函数readCSV(@“C:\userdata.csv”)代码>
readCSV
:打开文件,并在行上迭代new CsvUserData{…}
CsvUserData
类型的构造函数中创建新的CsvUserData
对象。所以这将永远重复
您可能打算将
readCSV
方法设置为静态或其他方式,并且只调用它一次。实际上没有理由从构造函数调用它。构造函数不应该真正打开一个文件并基于该文件创建内容;对于构造函数来说,这太多了。非常感谢,我想我创建了一个递归构造函数,我专注于我的while循环,但没有看到这一点。这就解决了我的问题,我将在5分钟内接受答案:)非常感谢,我想我创建了一个递归构造函数,我专注于我的while循环,但没有看到这一点。这解决了我的问题,我将在5分钟内接受答案:)