fea*_*net 2 c# exception-handling using-statement try-catch
可以在使用块内捕获异常,如果是,那么语法是什么?
所以,如下所示:
using (var creatingThing = new MyCreatingThing())
{
creatingThing.CreateSomething();
catch()
{
creatingThing.Rollback();
}
}
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?或者我是否需要手动编写此代码(即不使用)?
Jon*_*eet 15
您可以在using
语句中或外部放置try/catch :
using (...)
{
try
{
...
}
catch
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
要么...
try
{
using (...)
{
...
}
}
catch
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是,您不能在没有try块的情况下放置catch块.
根据您是否需要捕获资源获取表达式抛出的异常,是否希望在执行catch块之前处理资源以及是否需要访问catch块中的资源变量来选择正确的一个.
您不能隐式地登记try...finally
编译器生成的块(对于using
语句).您必须添加另一个try
语句,该语句将嵌套在生成的块中:
using (var creatingThing = new MyCreatingThing())
{
try
{
creatingThing.CreateSomething();
}
catch
{
creatingThing.Rollback();
}
}
Run Code Online (Sandbox Code Playgroud)
注意,一个使用实际上是一个尝试/最后的封面,所以它可能更容易代码:
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();
}
Run Code Online (Sandbox Code Playgroud)