1

据我所知,Using 语句内置了 Dispose() 和 Try-Catch 的实现。所以我想知道一些事情

  1. 是否可以在语句内部或语句外部不使用 try-catch 块而在 using 语句内部记录异常。如果不是,那么为什么它内置在语句中。

  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()
            }
4

2 回答 2

5

一个using语句涉及try/ finally; 没有catch。但坦率地说,你的担心是多余的。多重嵌套和复杂//try是“不可取的”,因为:catchfinally

  • 它使代码难以阅读
  • 甚至更难做对(大多数人都做错了,唉)
  • 它经常被滥用
  • 它表明您的方法做得太多

有了using,这不是问题;它使意图非常清晰,而不会增加复杂性或担忧。

我只会使用:

using (some_resource) {
    try {
        // some code
    } catch (Exception ex) {
        LogIt(ex);
        throw;
    }
}
于 2013-07-11T08:59:46.323 回答
1

使用编译来尝试{}最后{}。请参阅以下问题:C# using 语句是否执行 try/finally?

这样做的原因是无论是否抛出异常,资源都会被处理掉。资源处置是 using 语句的目的。

正确的实现是:

using(Resource myresource = GetResource())
{
    try
    {}
    catch(Exception e)
    { //Maybe log the exception here when it happens?
    }
}
于 2013-07-11T09:03:41.467 回答