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();
附带说明一下,您正在使用实现 IDisposable
的 StreamReader
,您应该将其包装在 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.
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();
附带说明一下,您正在使用实现 IDisposable
的 StreamReader
,您应该将其包装在 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.