С# Console.ReadLine() чтение нескольких строк

Я относительно новичок в кодировании и новичок в С#. Я работаю над учебными пособиями Channel 9 в MSDN и столкнулся с чем-то, чего не понимаю, включая Console.ReadLine().

В рамках одного из учебных пособий инструктор создал следующий код:

static void Main(string[] args)
    {
        StreamReader myReader = new StreamReader("Values.txt");
        string line = "";

        while (line != null)
        {
            line = myReader.ReadLine();
            if (line != null)
            {
                Console.WriteLine(line);
            }
        }

        myReader.Close();
        Console.ReadLine();
    }

Этот код работает — он считывает ряд чисел, каждое в отдельной строке, из Values.txt, а затем отправляет их в окно консоли. Мой вопрос: ПОЧЕМУ это работает? Насколько я понимаю, Console.ReadLine() читает одну строку из входного потока. Но в этом случае он читает несколько строк, несмотря на то, что не является частью цикла while. Я ожидал, что, как написано, окно консоли будет отображать только последнюю строку Values.txt, и что Console.ReadLine() должен будет следовать за Console.WriteLine(line) в операторе if, чтобы отобразить все строки . Что я не понимаю? Спасибо за помощь!


person namtrahj    schedule 04.03.2017    source источник
comment
Нет, я понимаю, что делает StreamReader.ReadLine() и где он находится. Рассматриваемый Console.ReadLine() является последней строкой в ​​блоке кода.   -  person namtrahj    schedule 04.03.2017


Ответы (2)


Console.WriteLine() — это команда, которая выводит данные в окно консоли, и поскольку она является частью цикла while. Он печатает каждую строку из файла.

Console.ReadLine() в конце здесь добавляется только для того, чтобы окно консоли отладки оставалось открытым до тех пор, пока пользователь не введет и не нажмет, обычно в этом случае Console.ReadKey() более подходит. Но в приведенном выше коде Console.ReadLine() — это не тот код, который считывает числа из файла. Это myReader.ReadLine(); в цикле пока. Таким образом, цикл while продолжает читать строки из файла, пока не дойдет до конца файла.

person Armin    schedule 04.03.2017
comment
Так это Console.WriteLine(), которая на самом деле отображает текст в окне консоли? До сих пор в руководстве каждый раз, когда мы использовали Console.WriteLine(), за ним следовала Console.ReadLine(). Мне это всегда казалось нелогичным, но я списал это на свой ограниченный разум. Но если Console.WriteLine() на самом деле выполняет работу по отображению, а Console.ReadLine() просто отвечает за окно консоли, это имеет гораздо больше смысла. - person namtrahj; 04.03.2017
comment
Да Console.WriteLine() отображает текст в окне консоли. - person Armin; 04.03.2017
comment
Console.ReadLine() используется для чтения ввода пользователя в окне консоли. Таким образом, пользователь может ввести ввод и нажать Enter, когда Console.ReadLine() считывает информацию. - person Armin; 04.03.2017
comment
Большое спасибо! Я бы хотел, чтобы в учебнике упоминалось, как они работают в тандеме. - person namtrahj; 04.03.2017
comment
Конечно. Я не знаю, кто проголосовал против — у меня пока нет права голоса. - person namtrahj; 04.03.2017

Каждый раз, когда цикл выполняется, он считывает строку. Если строка не нулевая, она повторяется снова и снова, пока не останется строк. И каждый раз, когда он зацикливается и line не равен нулю, он печатает строку.

Все это происходит до оператора Console.ReadLine() в конце. Все, что нужно сделать, это приостановить программу, чтобы вы могли увидеть результат.

person Community    schedule 04.03.2017
comment
Благодарю вас! У меня было фундаментальное непонимание того, что делают эти два метода. - person namtrahj; 04.03.2017