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
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.
- 1. Kann meine benutzerdefinierte Ausnahme nicht werfen
- 2. Serialisierung Ausnahme zu werfen
- 3. EXC_BAD_ACCESS auf Ausnahme werfen
- 4. SharedPreferences.getBoolean werfen lächerliche Ausnahme
- 5. Spinner getSelectedItem() werfen Ausnahme
- 6. Spring Validator werfen Ausnahme
- 7. Warum eine Ausnahme fangen, nur um sie erneut zu werfen?
- 8. Werfen (und Abfangen) Ausnahme in anonymer Methode
- 9. Datenbindung und werfen Ausnahme in Setter
- 10. Powershell: Erstellen und neue Ausnahme werfen
- 11. Scala SBT werfen IncompatibleClassChangeError Ausnahme
- 12. Simple CoreData Beispiel werfen Ausnahme
- 13. Get Methode werfen Request.Path Ausnahme
- 14. Werfen Ausnahme in der Hauptmethode
- 15. Sollte ich eine Ausnahme werfen
- 16. Selen-Webdriver werfen Timeout-Ausnahme
- 17. Wie benutzerdefinierte Klasse werfen Uiviewcontroller
- 18. Was ist der Unterschied zwischen werfen und werfen mit Arg gefangener Ausnahme?
- 19. Benutzerdefinierte Ausnahmen in Java werfen
- 20. Nachrichtenausnahme in benutzerdefinierte Eigenschaft werfen
- 21. Wie Exception in AspectJ um Advice erneut werfen
- 22. Laufzeitausnahme in Closable.close() werfen
- 23. Symfony2 und werfen Ausnahmefehler
- 24. Grails Sitzung-Bereich Service werfen NotSerializable Ausnahme
- 25. Facebook-SDK für Android werfen ClassNotFound Ausnahme
- 26. PHP-Skript wird keine Ausnahme werfen
- 27. Schaffung ExtentReports Instanz werfen NoSuchFieldError: VERSION_2_3_23 Ausnahme
- 28. Nullteilung nicht werfen Ausnahme in nunit
- 29. Test-SQL-Verbindung ohne Ausnahme zu werfen
- 30. Kompilierung fehlgeschlagen: eine Ausnahme werfen oder nicht?
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
@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