CSharp Unhandled Exception: System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта
У меня проблема с поиском подстроки из строки.
StreamReader objReader = new StreamReader("D:\\C#\\Mid\\project\\real estate\\store.txt");
string sLine = "";
ArrayList arrText = new ArrayList();
Console.Write("Type the keyword you want to search : ");
string search = Console.ReadLine();
while (sLine != null)
{
sLine = objReader.ReadLine();
int x = sLine.IndexOf(search);
Console.WriteLine(x);
if (sLine != null && x != -1)
{
Console.WriteLine(x);
arrText.Add(sLine);
}
Console.WriteLine(x);
}
Console.WriteLine("Here");
objReader.Close();
foreach (string sOutput in arrText)
Console.WriteLine(sOutput);
Console.ReadLine();
Я получаю сообщение:
Необработанное исключение: System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта.
3 ответа
sLine = objReader.ReadLine();
Вам необходимо проверить, имеет ли sLine значение NULL, так как ReadLine() вернет NULL, если читать нечего.
Попробуй добавить !objReader.EndOfStream
в состоянии вашей петли
while (sLine != null && !objReader.EndOfStream)
{
.
.
.
}
Ваш цикл неверен, потому что sLine
не получит null
значение до objReader.ReadLine()
называется. Вместо этого вы должны изменить свой цикл следующим образом:
using(StreamReader objReader = new StreamReader("file_location"))
{
do
{
sLine = objReader.ReadLine();
if(sLine != null)
//do stuff
}
while(!objReader.EndOfStream);
}
Я не использую do.. while зацикливает все это часто, но в этой ситуации это может быть хорошей идеей, так как вам нужно сначала вызвать ReadLine(), чтобы хотя бы начать читать файл. Таким образом, если вы находитесь в конце потока, он вернет NULL и пропустит ваш блок if, а затем прервется, поскольку он будет в конце потока, когда достигнет постусловия.
Кроме того, я знаю, что это только базовый пример, но обязательно добавьте код обработки ошибок, поскольку большинство этих операторов могут генерировать исключения.