Benutzer mit den meisten Antworten
Exeption selbst erstellen

Frage
-
Hallo Leute,
wie kann ich eine Exeption selbst erstellen, praktisch keine vorgegebene und diese auslösen und dann abfangen, so wie ich es mache funktioniert es leider nicht.
Erstellen und auslösen
abfangenif (char.IsWhiteSpace(this.Trennzeichen)) { Exception Err100;
Err100.Message = "Trennzeichen ist nicht Vorhanden\nBitte geben sie eines ein";
throw Err100; }catch (Exception e) { if (e = Err100) { MessageBox.Show(e.Message); } }
Ich denke der Fehler liegt beim Erstellen und auslösen, kann mich auch irren
Bitte klärt mich über falsche Fachbegriffe aus Beste Grüße Florian Reiter
- Bearbeitet Florian.Reiter Montag, 11. Juni 2012 10:10
Antworten
-
Hallo Florian,
sorry für das base an dieser Stelle. Bin es von VB so gewohnt. Richtig muss es so aussehen:
class InvalidTrennzeichenException:Exception { InvalidTrennzeichenException() : base() { } InvalidTrennzeichenException(String msg):base(msg) { } InvalidTrennzeichenException(String msg, Exception innerException): base(msg, innerException) { } }
Die innerException ist die Exception, die diese Exception zu verantworten hat. Als Beispiel, Du hast z.B. einen catch block wie in Deinem Beispiel irgendwo in Deinem Code. nun kannst Du dann eine andere Exception werfen und damit die Informationen nicht verloren gehen, wo und wann die erste Exception aufgetreten ist, übergibst Du diese an den constructor der neuen Exception Klasse.
Siehe: http://msdn.microsoft.com/en-us/library/system.exception.innerexception.aspx
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert Florian.Reiter Montag, 11. Juni 2012 12:45
Alle Antworten
-
Hallo Florian,
um eine eigene Exception zu "erstellen" und um diese geziehlt abzufangen, musst Du eine neue Klasse erstellen, die von Exception erbt. Der Standard ist dazu noch, dass der Name der Klasse auf Exception endet.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/ -
Als kleines Beispiel:
class InvalidTrennzeichenException:Exception { InvalidTrennzeichenException() { base(); } InvalidTrennzeichenException(String msg) { base(msg); } InvalidTrennzeichenException(String msg, Exception innerException) { base(msg, innerException); } }
um Deine Beispiele aufzugreifen:
if (char.IsWhiteSpace(this.Trennzeichen)) { InvalidTrennzeichenException Err100 = new InvalidTrennzeichenException("Trennzeichen ist nicht Vorhanden\nBitte geben sie eines ein"); throw Err100; }
catch (InvalidTrennzeichenException e) { MessageBox.Show(e.Message); }
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/ -
class InvalidTrennzeichenException:Exception { InvalidTrennzeichenException() { base(); } InvalidTrennzeichenException(String msg) { base(msg); } InvalidTrennzeichenException(String msg, Exception innerException) { base(msg, innerException); } }
ich bekomme die Fehlermedlung dass das 'base-Schlüsselwort' nicht zulässig ist, (Die Verwendung des base-Schlüsselworts ist in diesem Kontext nicht gültig.)
habe ich etwas zu erben vergessenusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;für was ist eigentlich innerExeption gemeint, entschuldige mich wenn ich blöde Frage stelle, binn noch am lernen
Bitte klärt mich über falsche Fachbegriffe aus Beste Grüße Florian Reiter
- Bearbeitet Florian.Reiter Montag, 11. Juni 2012 11:14
-
Hallo Florian,
sorry für das base an dieser Stelle. Bin es von VB so gewohnt. Richtig muss es so aussehen:
class InvalidTrennzeichenException:Exception { InvalidTrennzeichenException() : base() { } InvalidTrennzeichenException(String msg):base(msg) { } InvalidTrennzeichenException(String msg, Exception innerException): base(msg, innerException) { } }
Die innerException ist die Exception, die diese Exception zu verantworten hat. Als Beispiel, Du hast z.B. einen catch block wie in Deinem Beispiel irgendwo in Deinem Code. nun kannst Du dann eine andere Exception werfen und damit die Informationen nicht verloren gehen, wo und wann die erste Exception aufgetreten ist, übergibst Du diese an den constructor der neuen Exception Klasse.
Siehe: http://msdn.microsoft.com/en-us/library/system.exception.innerexception.aspx
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert Florian.Reiter Montag, 11. Juni 2012 12:45
-
Hallo Florian,
schau Dir mal die Entwurfsrichtlinien für Ausnahmen an.
Dort wird sowohl das Behandeln wie der Entwurf von neuen Ausnahmen gezeigt.
Für oben brauchst Du IMO aber keine eigene Ausnahme, da könnte je nach Zusammenhang
FormatException oder allgemeiner eine ArgumentException bzw. eine ihrer Inkarnationen
oder auch InvalidOperationException in Frage kommen.Etwas wie "Err100" deutet eine Art Fehlernummern an, dieses Konzept sollte man bei Ausnahmen meiden,
wie man bei COM mit seinen vielen (nichtssagenden) HResults sieht, funktioniert das nicht wirklich.
Eine Ausnahmebehandlung die am Ende endlose Typen abfragt um entsprechend zu reagieren,
wird auf lange Sicht nicht funktionieren und widerspricht dem Black-Box-Prinzip -
d. h. ein Aufrufer sollte nicht zuviel über die Implementationsdetails einer Klasse bzw. Methode wissen (müssen).Gruß Elmar
-
Hallo Florian,
schau Dir mal die Entwurfsrichtlinien für Ausnahmen an.
Dort wird sowohl das Behandeln wie der Entwurf von neuen Ausnahmen gezeigt.
Für oben brauchst Du IMO aber keine eigene Ausnahme, da könnte je nach Zusammenhang
FormatException oder allgemeiner eine ArgumentException bzw. eine ihrer Inkarnationen
oder auch InvalidOperationException in Frage kommen.Etwas wie "Err100" deutet eine Art Fehlernummern an, dieses Konzept sollte man bei Ausnahmen meiden,
wie man bei COM mit seinen vielen (nichtssagenden) HResults sieht, funktioniert das nicht wirklich.
Eine Ausnahmebehandlung die am Ende endlose Typen abfragt um entsprechend zu reagieren,
wird auf lange Sicht nicht funktionieren und widerspricht dem Black-Box-Prinzip -
d. h. ein Aufrufer sollte nicht zuviel über die Implementationsdetails einer Klasse bzw. Methode wissen (müssen).Gruß Elmar
Das mit dem Black-Box-Prinzip macht sinn Vielen Dank.Bitte klärt mich über falsche Fachbegriffe aus Beste Grüße Florian Reiter