2

可以在 using 块内捕获异常,如果可以,语法是什么?

因此,类似于以下内容:

using (var creatingThing = new MyCreatingThing())
{
    creatingThing.CreateSomething();

    catch()
    {
        creatingThing.Rollback();
    }
}

这可以做到吗?还是我需要手动编写此代码(即不使用)?

4

4 回答 4

15

using您可以在语句内部或外部放置 try/catch :

using (...)
{
    try
    {
        ...
    }
    catch
    {
        ...
    }
}

或者...

try
{
   using (...)
   {
       ...
   }
}
catch
{
    ...
}

但是,您不能只放置一个 catch 块而没有 try 块。

根据是否需要捕获资源获取表达式抛出的异常,是否希望在执行catch块之前释放资源以及是否需要访问catch块中的资源变量来选择正确的.

于 2010-07-26T16:48:14.707 回答
6

您不能隐式加入try...finally编译器生成的块(对于using语句)。您必须添加另一个try语句,该语句将嵌套在生成的块中:

using (var creatingThing = new MyCreatingThing())
{
    try
    {
        creatingThing.CreateSomething();
    }   
    catch
    {
        creatingThing.Rollback();
    }
}
于 2010-07-26T16:40:01.667 回答
6

请注意,使用实际上是一个尝试/最终在幕后,所以这样编写代码可能更容易:

MyCreatingThing creatingThing = null;
try
{
    creatingThing = new MyNCreatingThing())
    creatingThing.CreateSomething(); 
}    
catch() 
{ 
      Console.WriteLine("An Exception happened");
      if (creatingThing !=null)
          creatingThing.Rollback(); 
}
finally
{
      if (creatingThing !=null)
           creatingThing.Dispose(); 
}
于 2010-07-26T16:49:41.667 回答
3

当然,只需在 using 中添加 try:

using (var creatingThing = new MyCreatingThing())
{
    try
    {
    creatingThing.CreateSomething();
    }
    catch(Exception ex)
    {
        creatingThing.Rollback();
    }
}
于 2010-07-26T16:40:21.900 回答