0

これは私のコードです:

using (StreamReader reader = new StreamReader("test.xml"))
{          
    int prev = ' ';
    List<string> info = new List<string>();
    StringBuilder temp = new StringBuilder();

    for (int c; (c = reader.Read()) != -1; )
    {
        if (prev == '>' && c != '<')
        {
            while (c != '<')
            {
                if (c != ' ' && c != '\n' && c != '\r' && c != '\t') temp.Append((char)c);
                c = reader.Read();
            }

            if (temp.Length > 0)
            {
                info.Add(temp.ToString());
                Console.WriteLine(temp.ToString());
                temp.Clear();
            }
        }
        prev = c;
    }

    foreach (string item in info) Console.WriteLine(item);
}

XML ファイルから意味のあるコンテンツ (タグ間の情報) を読み取ろうとしています (.NET で実装されたメソッドなし)。プログラムはデータ チャンクを読み取り、それらをリストに正常に配置したように見えますが、ファイルの最後に到達すると、for ステートメントの後の残りのコードを実行せずにフリーズします。もうループしていないと言わざるを得ません-試してみましたが、フリーズするだけです。

XML ファイル:

<?xml version="1.0"><student><name>Pesho</name>
<age>21</age><interests count="3"><interest>
Games</instrest><interest>C#</instrest><interest>
Java</instrest></interests></student>
4

1 に答える 1

2

最も内側のループであるwhileループは、 と を読み取るため、ストリームからの読み取りを永久に続けることができるwhile (c != '<')ように見え(-1) != '<'ます。

( ) と( )!=の間で演算子を使用すると、後者は自動的に に変換されるため、実際には次のようになります。int-1char'<'int

while (c != 60)
于 2013-01-27T14:17:28.893 に答える