web-dev-qa-db-fra.com

Afficher l'exception sur la clause try-catch

Jusqu'à présent, chaque fois que je voulais montrer une exception levée de mon code, j'utilisais:

try
{
    // Code that may throw different exceptions
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());         
}

J'ai utilisé le code ci-dessus principalement pour des raisons de débogage, afin de voir le type exact d'exception et la raison correspondante pour laquelle l'exception a été levée.

Dans un projet que je crée actuellement, j'utilise plusieurs try-catch clauses et j'aimerais afficher un message contextuel en cas d'exception, pour le rendre plus "convivial". Par "convivial", j'entends un message qui masquerait des expressions comme exception de référence nulle ou exception d'argument hors plage qui sont actuellement affichées avec le code ci-dessus.

Cependant, je veux toujours voir les informations pertinentes avec le type d'exception qui a créé le message.

Existe-t-il un moyen de formater la sortie affichée des exceptions levées en fonction des besoins précédents?

15
apomene

Vous pouvez utiliser .Message, mais je ne recommanderais pas d'attraper directement Exception directement. Essayez d'attraper plusieurs exceptions ou énoncez explicitement l'exception et adaptez le message d'erreur au type d'exception.

try 
{
   // Operations
} 
catch (ArgumentOutOfRangeException ex) 
{
   MessageBox.Show("The argument is out of range, please specify a valid argument");
}

Attraper Exception est plutôt générique et peut être considéré comme une mauvaise pratique, car il peut masquer des bogues dans votre application.

Vous pouvez également vérifier le type d'exception et le gérer en conséquence en vérifiant le type d'exception:

try
{

} 
catch (Exception e) 
{
   if (e is ArgumentOutOfRangeException) 
   { 
      MessageBox.Show("Argument is out of range");
   } 
   else if (e is FormatException) 
   { 
      MessageBox.Show("Format Exception");
   } 
   else 
   {
      throw;
   }
}

Ce qui afficherait une boîte de message à l'utilisateur si l'exception est un ArgumentOutOfRange ou FormatException, sinon il renverra l'exception (et conservera la trace de pile d'origine).

11
Darren
try
     {
        /////Code that  may throws several types of Exceptions
     }    
     catch (Exception ex)
       {
         MessageBox.Show(ex.Message);         
       }

Utilisez le code ci-dessus.

Peut également afficher un message d'erreur personnalisé sous la forme:

try
     {
        /////Code that  may throws several types of Exceptions
     }    
     catch (Exception ex)
       {
         MessageBox.Show("Custom Error Text "+ex.Message);         
       }

Supplémentaire:

Pour la différence entre ex.toString () et ex.Message, suivez:

Exception.Message vs Exception.ToString ()

Tous les détails avec exemple:

http://www.dotnetperls.com/exception

3
Freelancer

Vous pouvez utiliser la propriété Exception.Message pour obtenir un message décrivant l'exception actuelle.

  catch (Exception ex)
   {
     MessageBox.Show(ex.Messagge());         
   }
2
Arshad

essayez ce code:

      try
      {
        // Code that may throw different exceptions
      }
      catch (Exception exp)
      {
           MessageBox.Show(exp.Message());         
      }
2
nassimlouchani