2016-06-20 15 views
0

meine Projektanforderung, die Dateien im angegebenen Verzeichnis zu analysieren. Ich habe Klassen wie MyDirectory, MyFiles, MyRecords und MyFields erstellt .... es ist im Grunde In-Memory-Darstellung meiner Daten. Ich brauche Hilfe bei der Ausnahmebehandlung. Ich möchte Ausnahme protokollieren und auch Fehler auf dem Bildschirm anzeigen. Wenn eine Ausnahme auf der MyFields-Klassenebene auftritt, möchte ich den Feldnamen zu CustomErrorString hinzufügen und die Exception zur MyRecords-Klasse auslösen. Fangen Sie diese Ausnahme in der MyRecords-Klasse ein, hängen Sie die Datensatznummer an CustomErrorString an, und werfen Sie dieselbe Ausnahme auf die MyFiles-Klasse. catch exception in der MyFiles-Klasse hängt Dateiname an CustomErrorString etc an ... kann jemand von mir mir sagen, wie man eine eigene Exception-Handling-Klasse dafür erstellt und wie man sie in verschiedenen Klassen behandelt und auch allgemeine system.Exception behandelt?werfen benutzerdefinierte Ausnahme Informationen sammeln und erneut werfen

Antwort

0

Sie können benutzerdefinierte Ausnahmen erstellen. Zum Beispiel etwas so einfaches wie folgt aus:

public class MyException : Exception 
{ 
    public string SomeProperty { get; set; } 

    public MyException(string message, string someProperty, Exception innerException) 
     : base(message, innerException) 
    { 
     SomeProperty = someProperty; 
    } 
} 

Wenn fangen jede Ausnahme, können Sie dann Wrap diese Ausnahme in Ihrer benutzerdefinierten ein, das Original als die innere Ausnahme Einstellung:

catch (Exception ex) 
{ 
    throw new MyException("Custom error message", "Custom info", ex); 
} 

Sie kann natürlich auch alles andere tun, was du magst in diesem catch Block. Protokollieren Sie Informationen usw. Und Sie können Ihre benutzerdefinierte Ausnahme und ihre Konstruktoren beliebig gestalten.

Der Hauptpunkt hier ist, dass Sie die ursprüngliche Ausnahme unverändert als eine Eigenschaft für die neue Ausnahme beibehalten. Jede Ebene im Stapel, die Informationen zur Ausnahme hinzufügen möchte, sollte dies tun, indem sie sie in eine eigene Ausnahme einfügt, die beliebige benutzerdefinierte Eigenschaften aufweisen kann.

+0

Dank David. Können Sie Ihren letzten Absatz erläutern? Wie kann ich den Wert der ursprünglichen Ausnahme beibehalten? Muss ich etwas wie public static StringBuilder MyCustomError varible in der MyException-Klasse erstellen und die Zeichenkette daran anhängen, wenn ich sie bei der aufgerufenen Funktion abfange? – bansi

+0

@bansi: Wenn die ursprüngliche Ausnahme als Eigenschaft '.InnerException' gesetzt wird (was der in diesem Beispiel verwendete' base() '-Konstruktor tut), wird diese ursprüngliche Ausnahme beibehalten. Wenn Sie das also beispielsweise dreimal im Stapel tun, haben Sie insgesamt 4 Ausnahmen, von denen jede eine Eigenschaft auf einer anderen ist. – David

Verwandte Themen