据我所知,Using语句内置了Dispose()和Try-Catch的实现。所以我想知道一些事情
是否可以在不使用语句的情况下记录异常 在语句内部或外部使用try-catch块。如果 不,那么为什么它内置于声明中。
嵌套或过度使用try-catch不是首选,那么为什么会这样的模型 首选使用。
using (some_resource)
{
try
{
}
catch
{
}
finally
{
//my exception logging mechanism
}
}
将成为
try
{
try
{
}
catch
{
}
finally
{
//my exception logging mechanism
}
}
catch
{
}
finally
{
//some_resource.Dispose()
}
答案 0 :(得分:5)
using
声明涉及try
/ finally
;没有catch
。但坦率地说,你的担忧是过度的;多重嵌套和复杂的try
/ catch
/ finally
是“不受欢迎的”,因为:
使用using
,这不是问题;它使意图非常干净,而不会增加复杂性或担忧。
我会用:
using (some_resource) {
try {
// some code
} catch (Exception ex) {
LogIt(ex);
throw;
}
}
答案 1 :(得分:1)
使用compiles尝试{}最后{}。请参阅以下问题:Does a C# using statement perform try/finally?
这样做的原因是无论是否抛出异常,资源都将被处置掉。资源处置是使用声明的目的。
正确的实施是:
using(Resource myresource = GetResource())
{
try
{}
catch(Exception e)
{ //Maybe log the exception here when it happens?
}
}