このWeb ページに書かれている内容に基づいて、私の理解が正しければ、using
ステートメントは のように機能するため、ステートメントで例外が発生してもプログラムがクラッシュしtry/finally
ないと誤って予想するかもしれません。using
ただし、DownloadString
次の例に示すメソッドが をスローするWebException
と、プログラムがクラッシュします。
using (WebClient client = new WebClient())
{
string response = client.DownloadString(url);
// ...
}
using
ステートメントは のようには機能せずtry/catch/finally
、実際には例外は処理されないため、これは正常です。using
しかし、私はその声明の目的が何であるか疑問に思います。
更新...以下の回答に基づいて、次の考慮事項を追加します。基本的に、例外を処理する必要がある場合、考えられる解決策は次のとおりです。
- ステートメントをブロック
using
内に配置します。try/catch
- ブロック
DonwloadString
内にメソッドのみを配置します。try/catch
- 次のコード サンプルのように、try/catch/finally ブロックを手動で記述します。
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();
}