使用这种方法,我正在遍历一个文件,以删除其中带有'T'
的行并将它们存储到列表中。在循环结束时,它应该退出,但是它会读取null
值并继续传递它,并抛出异常并显示消息...
System.ArgumentNullException:'值不能为null。参数名称:来源'
...试图查找字符的地方。
public static List<string> GetToolsFromFile()
{
FileStream FS = new FileStream(OpenFile(), FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
while (Sr.ReadLine() != null)
{
string line = Sr.ReadLine();
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
}
FS.Close();
}
return list;
}
OpenFile()
是使用OpenFileDialog
的方法。此文件经过测试并可以正常工作,它可以检索并显示所选文件的内容。
答案 0 :(得分:1)
您两次调用ReadLine方法。第一次是在while循环条件下,第二次是在while体内。假设您的文件只有3行,下面是对ReadLine方法的调用:
line
变量。line
变量分配为null,然后在空字符串上调用Contains
方法。这就是异常的意思。答案 1 :(得分:0)
请参阅更正的代码
FileStream FS = File.Open(@"c:\path_to_The_File", 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();
}