StreamReader Исключение NullReferenceException
Я создаю функцию, которая будет получать количество строк из StreamReader, исключая комментарии (строки, которые начинаются с'//') и новые строки.
Вот мой код:
private int GetPatchCount(StreamReader reader)
{
int count = 0;
while (reader.Peek() >= 0)
{
string line = reader.ReadLine();
if (!String.IsNullOrEmpty(line))
{
if ((line.Length > 1) && (!line.StartsWith("//")))
{
count++;
}
}
}
return count;
}
Данные моего StreamReader:
// Test comment
Но я получаю ошибку, ' ССЫЛКА на объект не установлена на экземпляр объекта.- Есть ли способ исправить эту ошибку?
EDIT Оказывается, это происходит, когда мой StreamReader равен нулю. Итак, с помощью музефана и предложенного мистером Смитом кода, я пришел к выводу: с этим:
private int GetPatchCount(StreamReader reader, int CurrentVersion)
{
int count = 0;
if (reader != null)
{
string line;
while ((line = reader.ReadLine()) != null)
if (!String.IsNullOrEmpty(line) && !line.StartsWith("//"))
count++;
}
return count;
}
Спасибо за помощь!
4 ответа:
Нет необходимости
Peek()
, это тоже может быть проблемой. Вы можете просто сделать это:string line = reader.ReadLine(); while (line != null) { if (!String.IsNullOrEmpty(line) && !line.StartsWith("//")) { count++; } line = reader.ReadLine(); }
Конечно, если вы
StreamReader
- null, то у вас есть проблема, но одного примера кода недостаточно, чтобы определить это - вам нужно отладить его. Там должно быть много отладочной информации для вас, чтобы понять, какой объект на самом деле null
Звучит как ваш
reader
Объектnull
:Вы можете проверить, является ли читатель нулевым, выполнив:
if (reader == null) { reader = new StreamReader("C:\\FilePath\\File.txt"); }
Чуть более аккуратный вариант предложенного musefan кода; только один код ReadLine (). +1 для предложения удаления проверки длины кстати.
private int GetPatchCount(StreamReader reader) { int count = 0; string line; while ((line = reader.ReadLine()) != null) if (!String.IsNullOrEmpty(line) && !line.StartsWith("//")) count++; return count; }
В вашем коде недостаточно информации для решения проблемы. Я сделал небольшое приложение с базой VS 2010 на моем предположении, и оно хорошо работает. Я считаю, что ваш код получить проблему с streamReader. Если streamReader имеет значение null, ваш код будет выдавать ссылку ' Object, не заданную для экземпляра объекта.' Вы должны проверить, что streamReader не равен null, и убедиться, что streamReader доступен.
Вы можете ссылаться на код ниже. С помощью убедитесь, что TextFile1.txt существующий в D:\ Надеюсь, что это помощь.
namespace ConsoleApplication1 { using System; using System.IO; class Program { static void Main(string[] args) { using (StreamReader streamReader = new StreamReader(@"D:\\TextFile1.txt")) { int count = GetPatchCount(streamReader); Console.WriteLine("NUmber of // : {0}", count); } Console.ReadLine(); } private static int GetPatchCount(StreamReader reader) { int count = 0; while (reader.Peek() >= 0) { string line = reader.ReadLine(); if (!String.IsNullOrEmpty(line)) { if ((line.Length > 1) && (!line.StartsWith("//"))) { count++; } } } return count; } } }