tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
2159
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    Hallo,
    wie kann ich folgendes machen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
     try {
     ...
     }
     catch (Exception1 e)
     catch (Exception2 e)
     {
        // handle Exceptions
     }

    d.h. ich will mehre Exceptions auffangen, aber alle gleich behandeln.


    Wie mache ich das am geschicktesten?


    MD
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Zwar sehr unsauber, aber:
    Code :
    1
    2
    3
    4
    5
    
    try {
     ..
    } catch (Exception ex) {
     ..
    }
    Damit fangst alle aufkommenden Exceptions ab. Um genauere Informationen zu erhalten, musst du dabei in der InnerException nachsehen.
     

  3. #3
    MFC openGL MFC openGL ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    483
    Du kannst auch das Exeption ex weglassen, klappt auch *g*
     
    Sprache : C/C++/C# & MFC
    Compiler : MSVC++ 7 / VS2003.net
    OS : Windows XP/2k

  4. #4
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Ist aber net sauber :P

    Ok, ist es so oder so nicht *gg*
     

  5. #5
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    Ich will nicht alle Exceptions auffangen, sondern nur 2 oder 3 und diese auf die selbe Art behandeln.
    geht das nicht?
     

  6. #6
    MFC openGL MFC openGL ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    483
    Klar geht das, einfach im Catch Block ne IF Anweisung schreiben, und dein ex abfangen, dann kannst du genau sagen was abgefangen werden soll, und was nicht

    Gruss

    MFC OpenGL
     
    Sprache : C/C++/C# & MFC
    Compiler : MSVC++ 7 / VS2003.net
    OS : Windows XP/2k

  7. #7
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Catch... If ... ? Autsch
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    try
    {
      ... 
    }
    catch (FileNotFoundException ex)
    {
      ...
    }
    catch (NullArgumentException ex)
    {
      ...
    }
    catch (Exception ex)
    {
     ....
    }
    Damit werden 2 bestimmte Exceptions abgefangen und alle anderen im letzen Catch-Block.
     

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Es besteht ja auch die Möglichkeit Exceptions zu schachteln... du könntest alle Exceptions die mit Datenzugriff haben beispielsweise in einer speziellen DataAccessException kapseln. Innerhalb der Behandlungsroutine für die DataAccessException knüpfst du dir dann die nested Exceptions vor...

    Edit: Das ist natürlich nur ein Beispiel... wenn man sowas macht sollte man immer die entsprechenden Exceptions aus dem Framework verwenden, bevor man überhaupt in betracht zieht für solch technische Belange eigene Exception Hierarchien hochzuziehen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
       using System;
       
       namespace De.Tutorials.ExceptionExamples
       {
        /// <summary>
        /// Zusammendfassende Beschreibung für Class1.
        /// </summary>
        class ExceptionExample
        {
            /// <summary>
            /// Der Haupteinstiegspunkt für die Anwendung.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                try
                {
                    SomeErrorProneDatabaseInteraction();
                }
                catch(DataAccessException dae)
                {
                    //Handle the Exception...
                    Console.WriteLine(dae.ToString());
                }
       
                Console.ReadLine();
       
            }
       
            static void SomeErrorProneDatabaseInteraction() 
            {
                if(new Random().Next(3) % 2 == 0)
                {
                    throw new DataAccessException("Severe DataAccessFailure", new System.Data.DataException("database puked because connection pool was full",new SystemException("help I need somebody heeeeeeelp")));
                }
                else 
                { 
                    throw new DataAccessException("Informal database indisposedness",new System.Data.ConstraintException("you inserted an invalid entry... you bastard!"));
                }
            }
        }
       
        class DataAccessException : Exception
        {
            public DataAccessException(String message, Exception exception) : base(message, exception)
            {
                
            }
        }
       }

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  9. #9
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    Ich möchte es so wie im Beispiel vom Norbert Eder machen, aber das bei allen Exceptions dieselbe Behandlung erfolgt. D.h. es soll einfach im Code ersichtlich sein, welche möglichen Exceptions auftreten können, aber alle gleich behandelt werden.
     

  10. #10
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Dann bau dir eine Methode, die das Handling macht bzw. die Auswertung des Fehlers. Und diese Methode rufst du dann jeweils auf. Oder du behandelst überhaupt nur Exception und gibst diese dann an eine Methode weiter, die dann die InnerExceptions behandelt und auswertet.
     

  11. #11
    Registriert seit
    Apr 2004
    Ort
    schweiz
    Beiträge
    618
    Oder du machst gar keinen Code in die Exception, und machst deinen Befehl im Finally... Für den Post bekomm ich bestimmt wieder was au die Backen von Norbert
     
    ~~Be water my friend~~ by bruce
    ~~Der einfachste Weg, bietet die schwerste Lösungssuche~~ by emkey
    *****************************
    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination

    .:Blödeleienschreiber des 1. offiziellen Sven Uwe Fan-Clubs:.

    -------------------------------------------------------------------------------------

    Mir sche*** egal wer dein Vater ist!! Wenn ich fische geht keiner übers Wasser!

  12. #12
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Ja, kriegst eine hinter die Backen ... weil du im Finally-Teil natürlich die Exception-Objekte nicht mehr hast und du somit NIE einen Fehler bekommst ... Eher blöd würd ich mal meinen ....
     

  13. #13
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Dann bau dir eine Methode, die das Handling macht bzw. die Auswertung des Fehlers. Und diese Methode rufst du dann jeweils auf. Oder du behandelst überhaupt nur Exception und gibst diese dann an eine Methode weiter, die dann die InnerExceptions behandelt und auswertet.
    Mit catch(Exception...) (alle) Exceptions zu fangen halte ich fuer keine keine gute Idee, da man dann auch Exceptions mitbekommt, fuer die man sich nicht interessiert. Deshalb halte ich die Vorgehensweise Domaenenspezifische Exceptions zu verwenden, wie etwa solche die mit dem Datenbankzugriff zu tun haben, innerhalb einer BasisException passed zur entsprechenden Domaene (siehe mein beispiel mit DataAcesssException) zu schachteln, fuer besser.

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  14. #14
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Damit hast du grundlegend recht, es ist jedoch auch immer auch eine Frage, ob der Aufwand dafür steht oder nicht. Für ein kleines Tool zahlt es sich nicht aus. Für ein größeres Projekt macht man das dann einmal und hats in weiteren Projekten zur Verfügung.
     

  15. #15
    Registriert seit
    Apr 2004
    Ort
    schweiz
    Beiträge
    618

    *backenschmerzen*

    Aber, wiso ist est nicht möglich in den einzelnen Exceptions ne flag zu setzen, und im Finally den Flag abzufragen? Braucht nicht wirklich viel Code, und mann kann jede Exception gleich handeln?

    *HandvorBackenHaltenTu*

     
    ~~Be water my friend~~ by bruce
    ~~Der einfachste Weg, bietet die schwerste Lösungssuche~~ by emkey
    *****************************
    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination

    .:Blödeleienschreiber des 1. offiziellen Sven Uwe Fan-Clubs:.

    -------------------------------------------------------------------------------------

    Mir sche*** egal wer dein Vater ist!! Wenn ich fische geht keiner übers Wasser!

Ähnliche Themen

  1. Mehrere Objekte vereinen (Block)
    Von hauseingang im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 07.09.09, 17:54
  2. Text aus einem Block stanzen!
    Von Teaspooner im Forum Cinema 4D
    Antworten: 11
    Letzter Beitrag: 20.10.08, 23:19
  3. Antworten: 1
    Letzter Beitrag: 15.08.07, 13:07
  4. Wie Felder in einem KlassenObjekt handeln?
    Von Cortadillo im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 14.05.07, 15:24
  5. Antworten: 1
    Letzter Beitrag: 12.04.05, 14:40