Så här använder du slutligen block
När ett undantag inträffar stoppas körningen och kontrollen ges till lämplig undantagshanterare. Det innebär ofta att kodrader som du förväntar dig ska köras kringgås. En del resursrensning, till exempel att stänga en fil, måste göras även om ett undantag utlöses. För att göra detta kan du använda ett finally
block. Ett finally
block körs alltid, oavsett om ett undantag utlöses.
I följande kodexempel används ett try
/catch
block för att fånga en .ArgumentOutOfRangeException Metoden Main
skapar två matriser och försöker kopiera en till den andra. Åtgärden genererar en ArgumentOutOfRangeException eftersom length
anges som -1 och felet skrivs till konsolen. Blocket finally
körs oavsett resultatet av kopieringsåtgärden.
using namespace System;
ref class ArgumentOutOfRangeExample
{
public:
static void Main()
{
array<int>^ array1 = {0, 0};
array<int>^ array2 = {0, 0};
try
{
Array::Copy(array1, array2, -1);
}
catch (ArgumentOutOfRangeException^ e)
{
Console::WriteLine("Error: {0}", e);
throw;
}
finally
{
Console::WriteLine("This statement is always executed.");
}
}
};
int main()
{
ArgumentOutOfRangeExample::Main();
}
class ArgumentOutOfRangeExample
{
public static void Main()
{
int[] array1 = {0, 0};
int[] array2 = {0, 0};
try
{
Array.Copy(array1, array2, -1);
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine("Error: {0}", e);
throw;
}
finally
{
Console.WriteLine("This statement is always executed.");
}
}
}
Class ArgumentOutOfRangeExample
Public Shared Sub Main()
Dim array1() As Integer = {0, 0}
Dim array2() As Integer = {0, 0}
Try
Array.Copy(array1, array2, -1)
Catch e As ArgumentOutOfRangeException
Console.WriteLine("Error: {0}", e)
Throw
Finally
Console.WriteLine("This statement is always executed.")
End Try
End Sub
End Class