在C#中(当使用try / finally时)如何在不调用return的情况下跳转到finally部分。
例如:
public bool SomeMethod()
{
try
{
...
if (...)
{
---> Jump to finally
}
else
{
...
}
...
if (...)
{
---> Jump to finally
}
else
{
...
}
...
return true;
}
finally
{
...
if (...)
return true;
else
return false;
}
}
如何强制跳转到finally部分(不使用return)?
修改
我要做的是:
public bool SomeMethod(ref string Error)
{
try
{
bool result = false;
if (...)
---> Exit to Finally
else
...
...
if (...)
---> Exit to Finally
else
...
...
--> more of the above kind of IFs
return true;
}
finally
{
...
if (!result)
{
LogAMessage("");
...
Error = "...";
...
}
return result;
}
}
答案 0 :(得分:6)
答案 1 :(得分:1)
你真的不应该这样做......
考虑以一种方式重写代码,这意味着goto - >最后不是要求。
也许将finally块中的代码拉出一个方法并在多个地方调用它......
<强>更新强>
您可以通过以下方式获得所需的行为:
public bool SomeMethod(ref string Error)
{
bool result = false;
try
{
if (...)
{
return result;
}
else
{
result = true;
...
return result;
}
}
finally
{
if (!result)
{
LogAMessage("");
...
Error = "...";
...
}
}
但是,要实现这一目标,您应该查看Delegation Pattern以获得更清晰的方法来实现此日志记录。
答案 2 :(得分:1)
您有几个选择:
在try / finally块的内部或外部添加一个虚拟块,并使用 break :
// dummy block inside
try {
do {
...
if (condition)
break;
...
} while (false);
} finally {
...
}
// dummy block outside
do {
try {
...
if (condition)
break;
...
} finally {
...
}
} while (false);
在finally块前添加标签并使用转到(请注意,建议不要使用goto)。
将您的区块放入单独的方法中,以便您可以使用返回而不离开外部方法。
答案 3 :(得分:0)
也许可以考虑将此方法放在实现IDisposable
的类中。
然后你可以调用这个方法,同时它包含一个using
语句,并保证被清除。