C# - 为什么此 if 语句会删除 StreamReader 输出上的换行符?

C#-Why does this if statment removes a new line character on StreamReader's output?

StreamReader reader = new StreamReader("randomTextFile.txt");
string line = "";

while (line != null)
{
    line = reader.ReadLine();

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

reader.Close();
Console.ReadLine();

在上面的代码中,while 语句中有一个 if 语句,即使它们指定了相同的东西 (line != null)。如果我删除 said if 语句,将在 txt 文件内容后添加一个新行(而不是“11037”,控制台将显示“11037”+ 一个空行)。

因为看完之后要检查,所以先看再检查。
这就是您的代码应有的样子。

var reader = new StreamReader("randomTextFile.txt");
var line = reader.ReadLine();

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

reader.Close();
Console.ReadLine();

附带说明一下,您正在使用实现 IDisposableStreamReader,您应该将其包装在 using 块中。

while-loop 退出条件只会在调用时被检查,因此在每次迭代开始时,而不是每次在其范围内时。

MSND: the test of the while expression takes place before each execution of the loop

你可以使用这个循环:

string line;
using (var reader = new StreamReader("randomTextFile.txt"))
{
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

您还应该在每个实现 IDisposable 的对象上使用 using 语句,如上所示。这样可以确保处理非托管资源。


根据 Console.WriteLine 的具体问题,即使值为 null 为什么它会写一个新行,那是 documented:

If value is null, only the line terminator is written to the standard output stream.