В Delphi я мог бы сделать что-то вроде этого:Как явно передать поток программы в блок finally в C#?
try
if not DoSomething then
Exit;
if not DoSomething2 then
Exit;
if not DoSomething3 then
Exit;
finally
DoSomethingElse;
end;
В других средств, если метод DoSomething
результаты ложные, то поток программы transffered в конце концов блока и DoSomething2
и DoSomething3
не выполняются.
Как добиться такого поведения на C#?
Заранее благодарен.
Edit1: Ниже пример не компилируется в VS 2008
edit2: Я сожалею, что я должен был быстро и забыть оператор возврата;
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;
}
Edit3: После тестирования, кажется, что самый простой способ для достижения этой цели является бросить исключение, если результат DoSomething1
ложно. Я могу бросить свое собственное исполнение, написать конкретное сообщение и передать его в предложение finally.
Прояснение для программистов на C# - в Delphi код в блоке finally всегда будет выполняться, даже если код вызывает «Exit» (эквивалент возврата). Я думаю, что Водзу хочет знать, так ли это на C#. –
Да, Джерри, Точно. – Wodzu
Вы хотите, чтобы ** DoSomethingElse ** выполнялся, если и только если любая из трех функций ** DoSomething ** возвращает false? – Mizipzor