可以在 using 块内捕获异常,如果可以,语法是什么?
因此,类似于以下内容:
using (var creatingThing = new MyCreatingThing())
{
creatingThing.CreateSomething();
catch()
{
creatingThing.Rollback();
}
}
这可以做到吗?还是我需要手动编写此代码(即不使用)?
可以在 using 块内捕获异常,如果可以,语法是什么?
因此,类似于以下内容:
using (var creatingThing = new MyCreatingThing())
{
creatingThing.CreateSomething();
catch()
{
creatingThing.Rollback();
}
}
这可以做到吗?还是我需要手动编写此代码(即不使用)?
using
您可以在语句内部或外部放置 try/catch :
using (...)
{
try
{
...
}
catch
{
...
}
}
或者...
try
{
using (...)
{
...
}
}
catch
{
...
}
但是,您不能只放置一个 catch 块而没有 try 块。
根据是否需要捕获资源获取表达式抛出的异常,是否希望在执行catch块之前释放资源以及是否需要访问catch块中的资源变量来选择正确的.
您不能隐式加入try...finally
编译器生成的块(对于using
语句)。您必须添加另一个try
语句,该语句将嵌套在生成的块中:
using (var creatingThing = new MyCreatingThing())
{
try
{
creatingThing.CreateSomething();
}
catch
{
creatingThing.Rollback();
}
}
请注意,使用实际上是一个尝试/最终在幕后,所以这样编写代码可能更容易:
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();
}
当然,只需在 using 中添加 try:
using (var creatingThing = new MyCreatingThing())
{
try
{
creatingThing.CreateSomething();
}
catch(Exception ex)
{
creatingThing.Rollback();
}
}