2015-09-17 4 views
1

Existe-t-il un moyen d'intercepter une exception pour déterminer si elle a été construite avec un message autre que celui par défaut?C# Déterminer si l'exception est initialisée avec un message

 try 
     { 
      throw new Exception(message);  // case 1 
      //throw new Exception();   // case 2 
     } 

     catch(Exception exp) 
     { 
      /* what do I put here such that if the case 2 exception were 
       caught it would output exp.ToString() instead of exp.Message? */ 

      textBox1.Text = exp.Message; // case 1 handeling 

     } 

Juste pour préciser dans quels cas d'exception (message) est lancé, je veux qu'il ouptut exp.Message et quand Exception() est lancée, je veux sortie exp.ToString(). Je préférerais accomplir ceci sans ajouter d'exception personnalisée. Merci.

+0

Dans l'exemple ci-dessus si exception throw() la valeur de exp.Message lit "Exception de type 'System.Exception' a été levée." – Zambis

Répondre

2

Vous devez vérifier le message contre une exception par défaut

catch (Exception e) 
{ 
    bool isDefaultMessage = e.Message == new Exception().Message; 
} 

Mise à jour

types de différence d'exception

catch (Exception e) 
{ 
    bool isDefaultMessage = false; 
    try 
    { 
    var x = (Exception) Activator.CreateInstance(e.GetType()); 
    isDefaultMessage = e.Message == x.Message; 
    } 
    catch (Exception) {} // cannot create default exception. 
} 
+0

Ce qui ressemblerait à 'textBox1.Text = isDefaultMessage? e.ToString(): e.Message; J'aime cette approche. –

+0

Pourquoi pas quand le bloc catch() obtient différents types d'exceptions avec des messages par défaut comme IndexOutOfRange ou FileNotFound. – Zambis

+0

Réponse mise à jour avec différents types d'exceptions. –