如何在不使用try-catch的情况下捕获并记录Using语句中的异常
本文关键字:记录 Using 异常 语句 情况下 try-catch | 更新日期: 2023-09-27 18:22:06
正如我所知,Using语句已经内置在Dispose()和TryCatch的实现中。所以我想知道一些事情
-
是否可以在不使用在语句内部或外部使用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()
}
using
语句涉及try
/finally
;不存在CCD_ 4。但坦率地说,你的担心有些过头了;多重嵌套和复杂的try
/catch
/finally
是"不可取的",因为:
- 它使代码难以阅读
- 甚至更难纠正(唉,大多数人都错了)
- 它经常被滥用
- 这表明你的方法做得太多了
对于using
,这不是问题;它使意图非常清晰,不会增加复杂性或顾虑。
我只想使用:
using (some_resource) {
try {
// some code
} catch (Exception ex) {
LogIt(ex);
throw;
}
}
使用compiles来Try{}Finally{}。请参阅以下问题:使用C#的语句是否执行try/finaly?
这样做的原因是,无论是否引发异常,资源都将被丢弃。资源处置是using语句的目的。
正确的实现是:
using(Resource myresource = GetResource())
{
try
{}
catch(Exception e)
{ //Maybe log the exception here when it happens?
}
}