如何在不使用try-catch的情况下捕获并记录Using语句中的异常

本文关键字:记录 Using 异常 语句 情况下 try-catch | 更新日期: 2023-09-27 18:22:06

正如我所知,Using语句已经内置在Dispose()和TryCatch的实现中。所以我想知道一些事情

  1. 是否可以在不使用在语句内部或外部使用try-catch块。如果不是,那么为什么它内置在声明中。

  2. 嵌套或过度使用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()
            }

如何在不使用try-catch的情况下捕获并记录Using语句中的异常

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?
    }
}