2017-03-04 242 views
0

我对编码相对比较陌生,并且是C#的新手。我正在通过MSDN上的Channel 9教程进行工作,并且遇到了一些我不明白的涉及Console.ReadLine()的问题。C#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()必须在if语句中跟随Console.WriteLine(line),以显示所有行。我不了解什么?谢谢您的帮助!

+0

不,我了解StreamReader.ReadLine()的功能,以及它在哪里。有问题的Console.ReadLine()是代码块中的最后一行。 – namtrahj

回答

0

Console.WriteLine()是输出到控制台窗口的命令,因为它是while循环的一部分。它打印文件的每一行。

Console.ReadLine()在这里结束时,仅添加强制调试控制台窗口保持打开状态,直到用户输入和命中输入为止,通常对于这种情况Console.ReadKey()更合适。 但在上面的代码中,Console.ReadLine()不是从文件中读取数字的代码。这是myReader.ReadLine();在while循环中。 所以while循环会一直读取文件直到文件结束。

+0

我不明白为什么这是被拒绝! – Armin

+0

那是它Console.WriteLine()实际上显示控制台窗口中的文本?到目前为止,在教程中,每次我们使用Console.WriteLine()时,都会紧接着Console.ReadLine()。对我来说,这似乎总是违反直觉,但我认为这是对我有限的理解。但是,如果Console.WriteLine()实际上在做显示工作,并且Console.ReadLine()只是负责控制台窗口,那就更有意义了。 – namtrahj

+0

是Console.WriteLine()在控制台窗口中显示文本。 – Armin

0

每次循环执行时,它都会读取一行。如果该行不为空,它将一次又一次地循环,直到没有更多行。并且每次循环,并且line不为空时,它将打印该行。

这一切都发生在最后的Console.ReadLine()声明之前。所做的只是暂停程序,以便您可以看到输出。

+0

谢谢!我对这两种方法在做什么有一个基本的误解。 – namtrahj