4

このサンプル アプリケーションを実行します。

class Program
{
    static void Main()
    {
        var reader = System.Xml.XmlReader.Create(@"C:\nonXml.txt");
        while (reader.Read()) { }
        System.Console.WriteLine("Ok");
        System.Console.ReadKey();
    }
}

nonXml.txtXML 以外のコンテンツを含む 1 行のテキスト ファイルです。

デバッガーを使用せずにアプリケーションを実行するとreader.Read、予想されるエラーがスローされXmlException、アプリケーションがエラーで終了します。F5デバッガー ( Visual Studio) で実行すると、デバッガーは例外を通知しますが、 F5(続行) を押した後、アプリケーションは予期せず正常に続行し、「OK」と書き込みます。

この場合、デバッグ モードで何が起こっているのでしょうか?

4

1 に答える 1

3

私はあなたの混乱を理解していると思います。デバッグしてビジュアルスタジオが例外を処理すると、エラー行で停止します。通常の状況では、F5 を押すと同じ行が再度実行され、エラーのループに陥ります。しかし、あなたの場合、例外は1つだけで、VSは何も起こらなかったように実行されます。

何が起こっているのか、今お気づきだと思います。Reader.Read() の最初の試みは、xml データのファイルを読み取り、ストリーム内のインデックスをファイルの末尾に移動します。F5 を押した後、この行を再度実行すると、reader.Read() は EOF のため false を返します。それでおしまい。

通常の実行 (デバッグなし) では、最初のキャッチされていないエラーでアプリケーションが終了し、他に何も起こっていません。

証拠としてのボーナス サンプル (貼り付けは while ループの代わりです):

try
{
    while (reader.Read()) { }
}
catch (Exception)
{
    Console.Out.WriteLine("We have excpetion, this is wrong file");
}

while (reader.Read()) { } // we have eof so we don't get exception only false 
于 2012-10-03T20:49:07.433 に答える