1

在下面的代码中,我想问:作者在用值初始化之前如何评估while循环中的变量'line'?

StreamReader myReader = new StremReader("Values.txt");

string line = "";

while (**line != null**)

{

    line = myReader.ReadLine();
    if (line != null)
        console.WriteLine(line);
}

myReader.Close();

console.ReadLine();
4

3 回答 3

4

它用一个初始化:空字符串:

string line = "";

即使它没有值并且 was null,仍然可以通过类似while循环中的比较来测试它是否为 null。

现在,这是一个未初始化的变量的样子:

string line; // Help! I'm only declared!
while (line != null)
{
    // do stuff
}

试图编译它会给你这个错误:“使用未分配的局部变量'line'”。但是分配任何价值,包括""null会使事情再次正确。

于 2012-10-01T23:13:18.040 回答
1

一种快速且易于阅读的方式:

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

至于您提供的作者的代码片段, line 被初始化为一个空字符串。因此,它总是至少会进入while循环一次。然后它从阅读器中获取一行,如果它不为空,则对其进行处理,然后继续前进。我永远不会那样写,因为你那样做的检查太多了。还不如做一个单一的分配和检查一行。

于 2012-10-01T23:26:37.130 回答
0

简短回答: line 变量已经用空字符串初始化""

关于给定的代码示例,我建议使用using构造来确保尽快处理非托管代码。

using (StreamReader myReader = new StreamReader("Values.txt"))
            {
                string line = "";
                while (line != null)
                {

                    line = myReader.ReadLine();
                    if (line != null)
                        console.WriteLine(line);
                }

                //myReader.Close();
                console.ReadLine();
            };
于 2012-10-02T01:20:26.103 回答