使用此方法,我遍历文件,删除其中带有T的行并将它们存储到列表中。在循环结束时,它应该退出,但是它将读取null值并继续传递它,并在引发异常的地方抛出异常“ System.ArgumentNullException:'值不能为null。参数名称:source'“为字符。
*** OpenFile()是使用OpenFileDialog的方法...该方法经过测试,可以在检索和显示所选文件的内容时正常工作。下面的新代码已被更改和更正。
public static List<string> GetToolsFromFile()
{
FileStream objFS = new FileStream(OpenFile(), FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
string line;
while ((line = Sr.ReadLine()) != null)
{
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
}
FS.Close();
}
return list;
}
您正在调用ReadLine方法two次。第一次是在while循环条件下,第二次是在while体内。假设您的文件为3行,这是对ReadLine方法的调用:
line
变量。line
变量分配为null,然后在空字符串上调用Contains
方法。这就是异常的意思。请参阅更正的代码
公共静态列表GetToolsFromFile(){
FileStream objFS = new FileStream(OpenFile(), FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
string line = Sr.ReadLine();
while (line != null)
{
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
line = Sr.ReadLine();
}
FS.Close();
}
return list;
}