全部,这很简单。有没有办法在finally
块内测试返回值而不执行
bool result = false;
try
{
if (someCondition)
{
result = true;
return result;
}
return result;
}
finally
{
if (result)
// Do something mind-blowing.
}
我是否必须使用变量result
?有更简洁的方法吗?
注意:我知道现在做的事情并不是很多工作。我很好奇.NET世界的错综复杂。
答案 0 :(得分:2)
简短的回答是:不,这是不可能的。我认为你最感兴趣的是你的代码具有良好的可读性。
有时你实际上需要引用finally块中的其他变量,即使你的函数返回了某些东西。
例如,如果您正在使用某些IDisposable实现并且您不希望或不能(为了保持可读性)使用using
块,那么您需要在Dispose()
块中finally
它们。
所以,拥有额外的声明并不是什么大问题,特别是如果它只是一个。代码仍然可读。
对于多个嵌套的try / catch语句,一个好的设计决策是将每个try / catch块与所有与之相关的逻辑放在一个单独的函数中,该函数返回true / false或者在调用者的上下文中有用的结果
答案 1 :(得分:1)
由于C#与D scope没有相同之处,因此您几乎被委托给try..finally
。
另请参阅:D Exception Safety。
答案 2 :(得分:1)
如果是我,我会有另一个变量来表明finally块中需要的东西。
你在另一条评论中提到SqlConnection,所以你可以这样做
if(myConnection!= null) { myConnection.Dispose(); }
虽然pukka .net方式会在一个使用块中有连接,所以最后不需要摆脱它。
如果你想坚持结果那么
bool result = false;
try
{
if (someCondition)
{
result = true;
}
}
finally
{
if (result) // Do something mind-blowing.
}
return result;
对我来说会更有意义,但也许不会对其他人......