Archief - [C#] Rethrow exception

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gamefactor

Legacy Member
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?

Wirward

Legacy Member
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".

Gamefactor

Legacy Member
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();
                }
            }

Cycloon

Legacy Member
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.

Gonzo

Legacy Member
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.

Obliv`

Legacy Member
Gonzo zei:
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.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan