2010-11-11 6 views
1

C'est le squelette du code que j'ai:Comment puis-je créer ma propre exception?

if(CheckForSomething()) 
{ 
    try 
    { 
     //do something 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     LogException(ex, item.server); 
    } 
    catch (Exception ex) 
    { 
     LogException(ex, item.server); 
    } 
} 
else 
{ 
    string error = "Some error"; 
    //want to call LogException with error as argument 
} 

private static void LogException(Exception ex) 
{ 
    //write ex to one log file 
    // write ex.message to another log file 
} 

Comment puis-je appeler la méthode de LogException du bloc else? J'ai essayé de lancer une chaîne comme exception et de créer une exception.

Répondre

8
LogException(new Exception("some error")); 
+1

Bien que vous devriez utiliser une exception spécifique plutôt que le générique. – ChrisF

+0

merci. travaux. – xbonez

+0

Alors s'il vous plaît marquer la réponse comme accepté –

4

Avez-vous envisagé de factoriser le comportement // write ex.message to another log file dans une fonction séparée et de l'appeler avec la chaîne désirée?

if(CheckForSomething()) 
    { 
     try 
     { 
      // do something 
     } 
     catch (UnauthorizedAccessException ex) 
     { 
      LogException(ex); 
     } 
     catch (Exception ex) // Never do this. Do you know how to handle an OutOfMemoryException? 
     { 
      LogException(ex); 
     } 
    } 
    else 
    { 
     string error = "Some error"; 
     LogMessage(error); 
    } 

private static void LogException(Exception ex) 
{ 
    // write ex to one log file 
    LogMessage(ex.Message); 
} 

private static void LogMessage(string message) 
{ 
    // write message to another log file 
} 
1
Exception e = new Exception(error);  
LogException ee = new LogException (Exception e); 
    throw ee; 

Mettre ce dans le bloc autre

9

Une meilleure question est imo pas comment mais pourquoi vous voulez faire cela? Pourquoi ne pas définir deux surcharges LogError, une qui prend un Exception et une autre qui prend un string.

private static void LogError(Exception ex) 
{ 
    // write ex to one log file 
    // write ex.message to another log file 
} 

private static void LogError(string error) 
{ 
    //nothing to write to exception-specific log file 
    // write error info to another log file 
} 

Il est pas vraiment conseillé de générer votre propre Exception exemple juste pour vous connecter comme ça.

+4

+1 pour la vérité. Ne répondez pas seulement à une mauvaise pratique, encouragez-en une bonne. –

3

vous pouvez également vous rendre propre classe d'exception comme celui-ci:

public class LogException: Exception 
     { 

      public LogException() : base() 
      { 
      } 

      public LogException(string message) : base(message) 
      { 

      } 

     } 
1

Vous pouvez faire quelque chose comme mentionné précédemment

LogException(new Exception("some error")); 

Mais il pourrait être préférable de créer votre propre classe d'exception:

class MyException : Exception 
{ 
    //... 
} 

puis

LogException(new MyException()); 
0

Quelques bonnes solutions jusqu'à présent. Vous ne voulez pas créer une exception personnalisée juste pour consigner quelqu'un d'autre aura une WTF? moment de lire votre code.

L'alternative est d'extraire tout le message d'exception pour le journal .... quelque chose comme

if(CheckForSomething()) 
{ 
    try 
    { 
     // do something 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     LogMessage(ex.Message); 
    } 

} 
else 
{ 
    LogMessage("Some Error!"); 
} 
private static void LogMessage(string message) 
{ 
    //write message to log 
} 

Création d'une exception dans le seul but de le transmettre dans un format géré par une méthode est un hack . Cela brise la compréhension implicite parmi les programmeurs quant aux exceptions et à leurs utilisations.

Questions connexes