Нет проверки EndOfStream в TextReader

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

Я создаю TextReader для чтения текстового файла построчно, используя ReadLine, что требует проверки завершения для конца этого потока.

TextReader TR = new TextReader("MyFile.txt");
while (!TR.EndOfStream) // fails to compile here
{
    // do something
}

EndOfStream не существует для класса TextReader, и этот код не будет компилироваться.


person Roger Layton    schedule 27.12.2017    source источник


Ответы (1)


Решение относительно простое, но его могут пропустить новички в C# и библиотеках .NET (а также эксперты, которые пишут код слишком быстро!).

Класс TextReader является подклассом StreamReader, и именно этот последний класс обеспечивает общую функциональность для всех своих дочерних классов.

Таким образом, решение состоит в том, чтобы объявить средство чтения как StreamReader, а затем создать его экземпляр как TextReader.

StreamReader TR = new TextReader("MyFile.txt");
while (!TR.EndOfStream) // it finds this property now
{
// do something
}
person Roger Layton    schedule 27.12.2017
comment
Пока вы не захотите использовать StringReader вместо этого. - person NetMage; 13.02.2021
comment
TextReader является абстрактным.. и это StreamReader тот, кто является подклассом - person Mauro Sampietro; 06.03.2021