Je suis tombé sur cette nouvelle fonctionnalité en C # qui permet à un gestionnaire de capture de s'exécuter lorsqu'une condition spécifique est remplie.
int i = 0;
try
{
throw new ArgumentNullException(nameof(i));
}
catch (ArgumentNullException e)
when (i == 1)
{
Console.WriteLine("Caught Argument Null Exception");
}
J'essaie de comprendre quand cela peut être utile.
Un scénario pourrait être quelque chose comme ceci:
try
{
DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
//MySQL specific error handling and wrapping up the exception
}
catch (SQLException e)
when (driver == "Oracle")
{
//Oracle specific error handling and wrapping up of exception
}
..
mais c'est encore quelque chose que je peux faire dans le même gestionnaire et déléguer à différentes méthodes en fonction du type de pilote. Cela rend-il le code plus facile à comprendre? Sans doute non.
Un autre scénario auquel je peux penser est quelque chose comme:
try
{
SomeOperation();
}
catch(SomeException e)
when (Condition == true)
{
//some specific error handling that this layer can handle
}
catch (Exception e) //catchall
{
throw;
}
Encore une fois, c'est quelque chose que je peux faire comme:
try
{
SomeOperation();
}
catch(SomeException e)
{
if (condition == true)
{
//some specific error handling that this layer can handle
}
else
throw;
}
L'utilisation de la fonctionnalité «catch, when» accélère-t-elle la gestion des exceptions car le gestionnaire est ignoré en tant que tel et le déroulement de la pile peut se produire beaucoup plus tôt que la gestion des cas d'utilisation spécifiques dans le gestionnaire? Y a-t-il des cas d'utilisation spécifiques qui correspondent mieux à cette fonctionnalité que les gens peuvent ensuite adopter comme bonne pratique?
try..catch...catch..catch..finally
?
catch (Exception ex)
, vérifier le type et throw
autrement. Un code légèrement plus organisé (évitant le bruit de code) est exactement la raison pour laquelle cette fonctionnalité existe. (C'est en fait vrai pour beaucoup de fonctionnalités.)
when
besoin d'accéder à l'exception elle