簡體   English   中英

在循環和變量初始化時

[英]While looping and variable initialization

在下面的代碼片段中,我想問:作者在使用值初始化變量之前,如何在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();

初始化為值:空字符串:

string line = "";

即使它沒有值並且為null ,也仍然可以通過while循環中的比較來測試它是否為null。

現在,這是一個未初始化的變量:

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

嘗試編譯時將出現以下錯誤:“使用未分配的局部變量'line'”。 但是,分配任何值(包括""null將使情況再次恢復正常)。

一種快速易讀的方式:

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

至於您提供的作者代碼段,則將line初始化為空字符串。 因此,它總是至少進入一次while循環。 然后,它從讀者那里抓一行,如果它不為null,則對其進行填充,然后繼續。 我永遠不會這樣寫,因為您以這種方式進行了太多檢查。 也可以做一次單項作業並在一行中簽入。

簡短的答案: 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();
            };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM