我不明白(行!= null)

时间:2013-12-09 09:26:45

标签: c# null line

我一直在关注C#教程,我有一个“作业”任务向后阅读文本文件,我设法完成它,但是我不理解教程中的给定答案。这是我的解决方案,然后是给我的解决方案。

我的解决方案

StreamReader myReader = new StreamReader("DecodeThis.txt");

string line = myReader.ReadLine();
char[] charArray = line.ToCharArray();

Array.Reverse(charArray);
Console.WriteLine(charArray);
Console.ReadLine();

给出解决方案

StreamReader myReader = new StreamReader("DecodeThis.txt");
string line = "";

while (line != null)
{
    line = myReader.ReadLine();
    if (line != null)
    {
        char[] charArray = line.ToCharArray();
        Array.Reverse(charArray);
        Console.WriteLine(charArray);
    }
}

Console.ReadLine();

他们都取得了相同的结果,但我真的想了解给定的解决方案以及它与我自己的解决方案有何不同。我认为我的解决方案有缺点。

7 个答案:

答案 0 :(得分:2)

不同之处在于您的解决方案只读取并返回第一行。给出的解决方案读取并反转文件中的每一行。

为什么检查行为null的原因是因为一旦你文件中没有文本,ReadLine()将返回null,因此它会使循环无限制。

答案 1 :(得分:2)

这一次读取文件的每一行。这在文件很大的情况下非常有用,并且在尝试将其存储在字符串中时会耗尽内存。

读完最后一行后,ReadLine()的下一次调用将返回null。

我猜这对你来说不是问题,因为文件只有1行。

希望这有帮助。

编辑:

你在两周内表现非常好。继续前进!

答案 2 :(得分:0)

您的解决方案只读取一行,而图书解决方案逐行读取文件,直到没有更多行要读取。 :) 这是因为它使用while循环来检查是否还有数据/行读取。如果没有,它将为null。但是,更好的建议解决方案是检查EndOfStream标志而不是

答案 3 :(得分:0)

嗯,您的示例只读取一行,因为解决方案逐行读取整个文件。检查null很重要,因为如果没有更多行要读取,myReader.ReadLine()将返回null。

MSDN:http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline%28v=vs.110%29.aspx

  

如果到达输入流的末尾,则返回值为null。

答案 4 :(得分:0)

快速查看您的解决方案只读一行。 给定的解决方案保持读取行直到它读取等于null的行。这发生在文件的末尾。 (如果你在那之后继续阅读,你会得到一个例外)

答案 5 :(得分:0)

ReadLine逐行读取文件。所以你的解决方案只读取文件的第一行。但是,如果要求读取文件的所有行,则需要按照给定的解决方案循环遍历行 检查ReadLine的返回值是否为null,以便识别已到达文件的末尾。如果ReadLine返回null(而不是空字符串),则已到达结束并且可以停止循环 有关如何工作的详细信息,请参阅ReadLine的documentation

答案 6 :(得分:0)

您的结果相同,因为您的文件可能只有一行!

“给定解决方案”代替迭代(读取和反转)所有文件的行,而您的解决方案只对一行有效。