2016-12-01 6 views
-1

Ich habe einen benutzerdefinierten Ausnahmehandler in C# erstellt. Ich möchte eine lesbare Nachricht für den Benutzer anzeigen, wenn eine Ausnahme aufgetreten ist.Benutzerdefinierter Ausnahmehandler C#

Ich habe versucht, die Ausnahme anhängig es Hresult Wert angeben, aber ich habe ein Problem, das ich nicht gesehen habe, die verwenden Hresult Wert und die angegebene Ausnahme

class UiException : Exception 
{ 
    public string Errormessage { get; set; } 
    public UiException(Exception e) 
    : base() 
    { 
     string exName = e.Source; 
     int errorNumber = e.HResult; 
     if (e.HResult == -2146233080) 
      Errormessage = "Index was outside the bounds of the array."; 

}  
} 
+0

Sorry, wenn ich das falsch verstanden habe, aber fragen Sie, wie Sie dies dem Bediener darstellen würde? Wenn ja, sehen Sie sich MessageBox.Show() an. – LordWilmore

+0

Ich möchte jede Ausnahme behandeln kann ausstehende HResult-Wert –

+0

@AhmedElBatrawy - Dies ist eine Definition einer Ausnahme. Es ist kein Ausnahmebehandler. Das wäre Teil eines 'try' /' catch'. – Enigmativity

Antwort

0

Sie wollen nicht zeigen HRESULT für die Ausnahmebestimmung HRESULT ist hauptsächlich für COM-Interop gedacht und wird in .NET wenig genutzt. Ich würde Folgendes empfehlen:

  1. Verwenden Sie den Typ der Basisausnahme, um Ihre benutzerdefinierte Fehlermeldung herauszufinden. Sie bleiben in .NET und es ist flexibler. Der Hauptvorteil in Bezug auf die Flexibilität besteht darin, dass Sie Ausnahmen, die von anderen Ausnahmen abgeleitet sind, leicht abdecken können, ohne ein Fallback definieren zu müssen. Außerdem können Sie mit einer as Umwandlung einfach weitere Informationen aus der Ausnahme extrahieren (z. B. die ParameterName einer ArgumentException).
  2. Machen Sie Ihre Basisausnahme zu einer inneren Ausnahme. Innere Ausnahmen gibt es seit der Dämmerung Zeit .NET und sind daher weit verbreitet unterstützt, z.B. zum Loggen oder Debuggen. Das Behalten der Fehlerquelle ist auch gut für Fehleranalyse und allgemeine Best Practice.
  3. Es gibt absolut keine Notwendigkeit für Ihre Errormessage Eigenschaft. Es gibt eine Message Eigenschaft, die Ihrem Zweck entspricht und (wie die innere Ausnahme) weit unterstützt wird.

So Ihre benutzerdefinierte Ausnahme wie folgt aussehen sollte:

class UIException : Exception 
{ 
    public UIException(Exception baseException) : 
     base(GetErrorMessage(baseException), baseException) 
    { 
    } 

    private static GetErrorMessage(Exception baseException) 
    { 
     if (baseException is IndexOutOfRangeException) 
     { 
      return "Index was outside the bounds of the array."; 
     } 
     else if (exception is InvalidOperationException) 
     { 
      //Return exception message 
     } 
     //... more else if in the chain 
     else 
     { 
      return baseException.Message; 
     } 
    } 
} 
Verwandte Themen