J'ai vu cet exemple:
static void Main(string[] args)
{
Console.WriteLine("Start");
try
{
SomeOperation();
}
catch (Exception) when (EvaluatesTo())
{
Console.WriteLine("Catch");
}
finally
{
Console.WriteLine("Outer Finally");
}
}
private static bool EvaluatesTo()
{
Console.WriteLine($"EvaluatesTo: {Flag}");
return true;
}
private static void SomeOperation()
{
try
{
Flag = true;
throw new Exception("Boom");
}
finally
{
Flag = false;
Console.WriteLine("Inner Finally");
}
}
Qui produit la sortie suivante:
Start
EvaluatesTo: True
Inner Finally
Catch
Outer Finally
Cela semble bizarre pour moi, et je suis à la recherche d'une bonne explication de cet ordre pour l'envelopper dans ma tête. Je m'attendais à de la finally
bloc doit être exécutée avant d' when
:
Start
Inner Finally
EvaluatesTo: True
Catch
Outer Finally
La documentation indique que ce ordre d'exécution est correcte, mais il ne précise pas pourquoi c'est fait comme ça et quelles sont exactement les règles de l'exécution de l'ordre ici.