1. #1
    Gamefactor's Avatar
    Registered
    23/07/05
    Location
    Dworp
    Posts
    593
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/2

    [C#] Rethrow exception

    Ik ben momenteel aan het experimenteren met c# en ze spreken over het rethrowen van een exception. Nu kan ik hier geen goed voorbeeld van vinden en kan ik me ook niet echt goed voorstellen waarvoor het dient.

    Het rethrowen van een exception gebeurd als volgt:

    Code:
     catch (OverflowException e)
                    {
                        throw;
                    }
    Nu is de vraag wat dit juist doet; want op welke manier ik het ook gebruik, ik blijf fouten krijgen. Iemand die mij hierbij kan helpen?
    no votes  

  2. #2

    Registered
    11/01/10
    Location
    Kortrijk
    Posts
    1
    iTrader
    0
    Mentioned
    0 Post(s)
    Kan je meer van je code tonen?

    Als je een rethrow doet van een exception die voorkomt binnen uw try-catch blok is het normaal dat je een fout krijg. Een exception is nu eenmaal een "fout".
    no votes  

  3. #3
    Gamefactor's Avatar
    Registered
    23/07/05
    Location
    Dworp
    Posts
    593
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/2
    Om te proberen had ik iets al dit, gewoon om te zien wat het gaf:

    Code:
     static void TryCatchTest()
            {
                for (int x = 0; x < 10; x++)
                {
                    try
                    {
                        testje(x);
                        Console.WriteLine(x.ToString());
                    }
                    catch (TimeoutException e)
                    {
                        Console.WriteLine("timeout");
                    }
                    catch (OverflowException e)
                    {
                        throw;
                    }
                }
            }
            static void testje(int getal)
                {
                    if(getal == 0)
                    {
                        throw new OverflowException();
                        throw new TimeoutException();
                    }
                }
    no votes  

  4. #4
    Gamefactor's Avatar
    Registered
    23/07/05
    Location
    Dworp
    Posts
    593
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/2
    Ok bedankt, het is gelukt
    no votes  

  5. #5
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    Rethrowen van een exceptie kan bv handig zijn om iets te loggen. In je methode vang je kan de exceptie op, je logt de exceptie en je gooit die verder. Het verder gooien is nodig zodat ook bovenliggende lagen kunnen merken dat er ergens iets fout is gelopen.
    “In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
    PSN: Cycloon - Final Fantasy XIV: A realm reborn character
    no votes  

  6. #6
    Gonzo's Avatar
    Registered
    03/08/02
    Location
    the.onion
    Posts
    10,620
    iTrader
    35 (97%)
    Mentioned
    5 Post(s)
    Reputation
    0/330
    Het nut van rethrowen, is dat je call stack intact blijft.
    Bij het throwen van een nieuwe exception, vertrek je terug van een lege stack.
    Hi, my name is Gonzo and I approve this message.

    "Gonzo is the puppet master!" - Foxiie /// "Het is nog onduidelijk of en wanneer Gonzo op de markt komt, en tegen welke prijs" - Tweakers
    "Koop gewoon een pak smeltkaas. Kost 20 cent voor 10 schellen en smijt da tussen je bicky. wie betaalt er nu 50 cent extra voor een bicky cheese ?" - Nutteloze Micro-optimalisaties voor Gevorderden
    no votes  

  7. #7

    Registered
    08/11/03
    Location
    Antwerpen
    Posts
    1,726
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by Gonzo View Post
    This quote is hidden because you are ignoring this member. Show
    Het nut van rethrowen, is dat je call stack intact blijft.
    Bij het throwen van een nieuwe exception, vertrek je terug van een lege stack.
    Inderdaad, er zijn wel wat verschillend tussen:

    1) throw ex;
    2) throw;
    3) throw new Exception(ex);

    In het eerste geval blijft je call stack niet intact, wat wel het geval is bij de tweede en de derde regel. Het verschil tussen 2 en 3 is dat je in het laatste geval de exception wrapt in een andere exception.
    In de meeste gevallen zal je regel 2 gebruiken.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in