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 = "";

値がなく、だった場合でも、そのループnullのような比較で null かどうかをテストすることは可能です。while

さて、これは初期化されていない変数がどのように見えるかです:

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

コンパイルしようとすると、「割り当てられていないローカル変数 'line' の使用」というエラーが表示されます。""しかし、 orを含む任意の値を割り当てるnullと、物事が再び正しくなります。

于 2012-10-01T23:13:18.040 に答える
1

すばやく簡単に読む方法:

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

あなたが提供した著者のコードスニペットに関しては、行は空の文字列に初期化されています。このため、常にwhile少なくとも 1 回はループに入ります。次に、リーダーから行を取得し、null でない場合は処理を行い、次に進みます。あなたはあまりにも多くのチェックをそのように行っているので、私はそのように書くことは決してありません. 単一の割り当てを行い、1行でチェックすることもできます。

于 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 に答える