Wod*_*dzu 0 c# delphi try-catch-finally
在Delphi中,我可以这样做:
try
if not DoSomething then
Exit;
if not DoSomething2 then
Exit;
if not DoSomething3 then
Exit;
finally
DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)
在其他方法中,如果方法DoSomething结果为假,则程序流被转移到finally块,DoSomething2并且DoSomething3不执行.
如何在C#中实现这种行为?
提前致谢.
Edit1: 以下示例无法在VS 2008中编译
编辑2:对不起,我要快速忘记退货声明;
XElement OrderStatus(q_order_status Request)
{
XElement Response;
try
{
if (DoSomething() != 0 )
{
return;
}
}
catch(Exception e)
{
// catch some errors and eventually pass the e.Message to the Response
}
finally
{
Response = new XElement("SomeTag", "SomeResponse");
}
return Response;
}
Run Code Online (Sandbox Code Playgroud)
Edit3:
经过测试,似乎最简单的方法是在结果DoSomething1为false时抛出异常.我可以抛出自己的execption,编写一个特定的消息并将其传递给finally子句.
Jor*_*ren 14
你真的不应该使用异常处理结构进行流控制.也就是说,Exit与returnC#相当.关于[return keyword] [1]的MSDN文档说:
如果return语句在try块内,则finally控件(如果存在)将在控制返回调用方法之前执行.
通常,finally如果try已到达相应的块,则几乎总是执行-block.有一些罕见的情况是无法保证finally-block执行,但它们都是致命错误,程序可能会立即崩溃.
您的代码在C#中的外观如何:
try
{
if (!DoSomething())
return;
if (!DoSomething2())
return;
if (!DoSomething3())
return;
}
finally
{
DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
但同样,不要这样做.try和finally旨在处理异常,而不是正常的流量控制.
回复您的编辑:
在您的代码return不编译,因为该方法的返回类型是XElement与return自身时返回类型是只能用void.你可以使用return new XElement("SomeTag", "SomeResponse");,因为这是finally将要做的事情,或者你可以Response提前分配和做return Response;.
不过要注意的是,虽然finally总是执行,在return Response;自带之后,在没有执行,如果原因走进了finally-块是因为你做了一个return内部try-阻塞.
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |