【发布时间】:2014-02-27 23:26:23
【问题描述】:
根据web page 上所写的内容,如果我理解正确,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 块,如以下代码示例所示。
第三种解决方案的示例代码。
WebClient client = new WebClient();
try
{
string response = client.DownloadString(url);
// ...
}
catch(Exception ex)
{
// handle (or ignore) the exception
}
finally
{
if (client != null)
client.Dispose();
}
【问题讨论】:
-
它会为你调用 Dispose 方法。
-
using可能不像try/catch/finally但它确实像try/finally{dispose()} -
using 语句确保 Dispose 被调用,即使您在对象上调用方法时发生异常。
标签: c# .net exception using-statement try-finally