none
Exeption selbst erstellen RRS feed

  • 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

    if (char.IsWhiteSpace(this.Trennzeichen)) { Exception Err100;
                    Err100.Message = "Trennzeichen ist nicht Vorhanden\nBitte geben sie eines ein";
                    throw Err100; }

    abfangen
    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






    Montag, 11. Juni 2012 10:05

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/

    Montag, 11. Juni 2012 11:17

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/

    Montag, 11. Juni 2012 10:25
  • 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/

    Montag, 11. Juni 2012 10:38
  •     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 vergessen

    using 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



    Montag, 11. Juni 2012 11:04
  • 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/

    Montag, 11. Juni 2012 11:17
  • 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

    Montag, 11. Juni 2012 12:40
    Beantworter
  • 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

    Die Sinnhaftigkeit sei dahingestellt, da ich es ausprobieren wollte.
    Das mit dem Black-Box-Prinzip macht sinn Vielen Dank.

    Bitte klärt mich über falsche Fachbegriffe aus Beste Grüße Florian Reiter

    Montag, 11. Juni 2012 12:46