Sobes.tech
Middle

Is er een verschil in de volgorde waarin de catch-blokken worden geschreven?

sobes.tech AI

Antwoord van AI

Ja, dat is er. De catch-blokken worden sequentieel verwerkt. Meer specifieke uitzonderingen moeten vóór de meer algemene komen.

try
{
    // Code die een uitzondering kan veroorzaken
}
// Meer specifieke uitzondering
catch (System.FormatException ex)
{
    // Afhandeling van formatfout
}
// Minder specifieke uitzondering
catch (System.Exception ex)
{
    // Afhandeling van alle andere uitzonderingen
}

Als je de meer algemene uitzondering als eerste plaatst, wordt de meer specifieke catch-blok nooit bereikt voor uitzonderingen die hiervan afleiden. Bijvoorbeeld, FormatException is een afgeleide van Exception. Als catch (Exception ex) eerst komt, vangt hij ook FormatException.

Onjuiste volgorde:

try
{
    // Code die een uitzondering kan veroorzaken
}
// Algemene uitzondering
catch (System.Exception ex)
{
    // Afhandeling van alle uitzonderingen, inclusief FormatException
}
// Deze blok wordt nooit bereikt voor FormatException,
// omdat hij al wordt opgevangen door het vorige blok
catch (System.FormatException ex)
{
    // Deze code is in dit geval niet bereikbaar
}

De C#-compiler geeft een waarschuwing of fout voor een onbereikbaar catch-blok.