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, а затем прервется, поскольку он будет в конце потока, когда достигнет постусловия.

Кроме того, я знаю, что это только базовый пример, но обязательно добавьте код обработки ошибок, поскольку большинство этих операторов могут генерировать исключения.

Другие вопросы по тегам