0

プログラムに次のコードがあります。

HttpWebResponse response = null;
try
{
    response = (HttpWebResponse)request.GetResponse();
    if (response == null)
        return false;
    aDoc.Load(response.GetResponseStream()); //Load the response into another object
}
catch (WebException e)
{
    //404's are caught and are saved as the response.
    //The reason being that 404's from this particular
    // website still provide relevant information that needs
    // extracting.
    response = (HttpWebResponse)e.Response;
}
finally
{
    response.Close();
}

私の質問は: WebException がキャッチされた場合、からの応答response = (HttpWebResponse)e.Response;はメソッドに渡されaDoc.Load()ますか?

余談ですが、try-catch ブロックにさらに移動する前に、次のコードがありました。finallywithを追加するClose()方が安全だと思いましたが、そもそも何かを変更する必要があったかどうかはまだ疑問です。

HttpWebResponse response = null;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch (WebException e)
{
    response = (HttpWebResponse)e.Response;
}

if (response == null)
    return false;
aDoc.Load(response.GetResponseStream());
response.Close();
4

3 に答える 3

1

いいえ。2番目の例で行ったように、正しいコードブロックを分離する必要があります。

もちろんネストできます:

HttpWebResponse response = null;

try {
    try {
        response = (HttpWebResponse)request.GetResponse();
    } catch (WebException e) {
        response = (HttpWebResponse)e.Response;
    }

    if (response == null) return false;

    aDoc.Load(response.GetResponseStream());
} finally {
    if (response != null) response.Close();
}
于 2012-07-18T11:43:42.210 に答える
1

いいえ、

WebExceptionがスローされた場合、それはブロックを離れ、tryブロック内のそれ以上のコードはtry実行されず、ブロック内にあるものだけが実行されfinallyます。

于 2012-07-18T11:43:43.930 に答える
1

答えは「はい」と「いいえ」です。応答を渡すコードaDoc.Load()は最後のステートメントであるため、例外はその行またはそれより上でのみ発生する可能性があります。

aDoc.Load()WebExceptionをスローしないと仮定すると、答えはノーです。

aDoc.Load()WebExceptionをスローする場合、例外はそのメソッドから発生する可能性があります-技術的にはメソッドaDoc.Load()からの結果が渡されGetResponse()、例外が内部でスローされる可能性があります-実装aDoc.Load()によって異なりますがaDoc.Load()

例外はコードの実行を停止するため、例外がスローされると、次に実行されるコードはcatchブロック内(または、存在しない場合はスタックのさらに上のキャッチブロック)にあるコードであり、次にfinally実行されます。

私の仮定では、aDoc.Load()はいかなる種類のWebメソッドでもない(そしておそらくあなた自身のクラスである)ので、それがWebExceptionをスローするかどうかについて最もよく教育されるべきですが、答えはおそらく「いいえ」です

于 2012-07-18T11:44:09.273 に答える