enz*_*m83 0 .net c# exception using-statement try-finally
根据本网页上的内容,如果我理解正确,该using语句就像a一样try/finally,所以我可能错误地认为如果在using语句中发生异常,它不应该使程序崩溃.
但是,当DownloadString下面的示例中显示的方法抛出a时WebException,程序崩溃.
using (WebClient client = new WebClient())
{
string response = client.DownloadString(url);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是正常的,因为using语句不像a那样工作try/catch/finally,实际上没有处理异常.但后来我想知道这个using声明的目的是什么.
更新...根据以下回复,我添加了以下注意事项.基本上,如果我需要处理异常,可能的解决方案可能如下.
using语句放在一个try/catch块中.DonwloadString方法放在try/catch块中.第三种解决方案的示例代码.
WebClient client = new WebClient();
try
{
string response = client.DownloadString(url);
// ...
}
catch(Exception ex)
{
// handle (or ignore) the exception
}
finally
{
if (client != null)
client.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,using语句就像try/finally一样
正确.
所以我希望如果在using语句中发生异常,它不应该使程序崩溃.
不正确.
try/finallynor using语句都没有吞下异常 - 如果你没有捕获异常,它将会传播.如果它没有被捕获,它通常会终止该过程.(在某些情况下它不会,根据它所在的线程和CLR的配置方式,但这是另一回事.)
但后来我想知道使用声明的目的是什么.
使编写需要处理资源的代码变得更加简单.就这样.如果我们没有using声明,我们就会有一个很大的try/ finally刚刚称为块Dispose......这将是相当丑陋.(去过那里,完成了 - 直到Java 7引入了try-with-resources语句,这就是Java.)
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |