.NET相当于Ruby的begin / rescue / else

时间:2013-02-15 23:17:13

标签: .net ruby

Ruby有一个else块,可以用于开始/救援(try / catch for .NET folks)

begin
 #some code
rescue
 #oh noes! Catches errors like catch blocks in .NET
else
 #only executes when NO errors have occured
ensure
 #always executes - just like the finally in .NET
end

else块中的代码只有在没有引发错误的情况下才会执行。 .NET中是否有提供此功能的构造?

2 个答案:

答案 0 :(得分:3)

在.NET中,您只需在#some code之后列出代码:

try
{
   // some code
   // Only executes when NO errors have occurred
}
catch (Exception e)
{
    // Catches errors
}
finally
{
    // Always executes
}

// some code中的任何异常都会阻止“仅执行”部分的发生,因为它会跳转到catch然后finally

答案 1 :(得分:1)

在其他语言中有一些与异常处理有关的事情,但在C#中却没有。一个这样的例子是fault handler - 在IL中,可以定义一个仅在出现错误时才会触发的处理程序。

fault似乎与您想要的相反,但您可以构造逻辑,使得某些代码只会在发生错误时执行,无论您如何处理异常。 .NET将为迭代器生成try..fault块。 Bart De Smet曾经挑战他博客的读者尝试模拟错误处理程序,你可以阅读更多关于它的信息here