質問

この Webページ、そして私が正しく理解した場合、using文はtry/finallyのように機能します。したがって、usingステートメントで例外が発生した場合は、プログラムをクラッシュしないでください。

しかしながら、以下の例に示すDownloadStringメソッドがWebExceptionをスローし、プログラムがクラッシュします。

using (WebClient client = new WebClient())
{
    string response = client.DownloadString(url);
    // ...
}
.

usingステートメントはtry/catch/finallyのように機能しないため、通常は例外は処理されません。しかし、それでは、usingステートメントの目的は何の目的はどのくらいだと思います。

アップデート... 以下の応答に基づいて、次の考慮事項を追加します。基本的に、私が例外を処理する必要がある場合、可能な解決策は次のようになる可能性があります。

  1. usingステートメントをtry/catchブロック内に置きます。
  2. DonwloadStringブロック内にtry/catchメソッドだけを置きます。
  3. 次のコードサンプルのようにTry / Catch / Finallyブロックを手動で書き込みます。
  4. 第3の解のサンプルコード

    WebClient client = new WebClient();
    try
    {
        string response = client.DownloadString(url);
        // ...
    }
    catch(Exception ex)
    {
        // handle (or ignore) the exception
    }
    finally
    {
        if (client != null)
            client.Dispose();
    }
    
    .

役に立ちましたか?

解決

私が正しく理解した場合、使用文はtry / party

のように機能します。

正しい。

だから私は、使用文に例外が発生した場合、プログラムをクラッシュしないでください。

誤って

try/finallyusingステートメントもスロウの例外を吸い込みません - 例外をキャッチしない場合は、伝播します。それが取り消されていない場合は、通常プロセスを終了します。 (どちらのスレッドに基づいて、CLRがどのように設定されているか、それが異なる問題であるかに基づいて、それがない場合はいくつかのケースがあります。)

しかし、それでは、使用文の目的は何であるか疑問に思います。

リソースを廃棄する必要があるコードを書くことをより簡単にするために。それで全部です。 usingステートメントを持っていない場合は、tryと呼ばれるfinally / Disposeブロックの lot があります。 (そこに行ったことがある - Java 7がtry-with-resourcesのステートメントを導入するまでJavaであることがありました。)

他のヒント

usingステートメントは、すべての例外を魔法のように消えることはできません。これは、管理されていないリソースが解放されていることを確認するために重要です。

発生する例外を再出回り、それでもあなた自身のコードでそれらを処理する必要があります。

msdn using

のMSDN説明を参照してください。

短い場合は、例外が発生しても.Dispose()が呼び出されるようにします。しかしそれはそのことをすることから例外を止めません。

使用文はキャッチを持たず、最後に、したがってあなたのためにリソースを廃棄します。使用文がすべての例外を捉えて実行を続行した場合は、デバッグの大きな障害があります。

使いやすくて早く

自分のために会いましょう

var myVar = null
try
{
    my = new Object();
    //Do stuff
}
finally
{
    if(myVar != null)
        myVar.Dispose()
}
.

vs

using(var myVar = new Object())
{
    //Do stuff
}
.

dispose がそのオブジェクトに対して呼び出されていることを確認するだけです。を使用してを使用しても、try / partyのどちらかの例外処理をしないでください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top