Csharp/Feilbehandling

(Omdirigert fra «Csharp/Kapittel15»)

Feilbehandling (exceptions)

rediger

Exceptions er objekt orientert feilbehandling. Alle feil vil gi en exception, som bør behandles, ellers vil programmet gi ifra seg en stor feilmelding der det står "Unhandled Exception". For å behandle feil, bruker man en try-catch-finally blokk. En try-catch blokk må inneholde en rekke instruskjoner i try blokken, og minst én catch blokk, finally er valgfri. En catch blokk må inneholde ett parameter, det kan enten være en datatype, eller en variabel. Hvis det står kun en datatype i parameterlistn, vil den fange opp alle feil av den typen, hvis det står en variabel, vil den fange opp alle feil av den typen, og lagre all informasjon i variabelen. Finally vil bli kalt uansett om funksjonen feilet eller ikke, og er som regel ikke nødvendig.

int ParseString(string value)
{
  // Deklarer en variabel som skal inneholde verdien
  int val = 0;
  try
  {
    // Forsøk å parse tekst strengen
    val = int.Parse(value);
  }
  catch(FormateException ex)
  {
    // Her deklarerer vi ex som variabel, så vi vet litt mer om hva som er feil
    // ex vil inneholde all feilinformasjon
    // Vi viser frem en meldingsboks som inneholder informasjon om feilen
    MessageBox.Show(ex.Message);
  }
  catch(OverflowException)
  {
    // Her vet vi hva som er feil, så vi trenger ikke noen variabel
    MessageBox.Show("Verdi falt utenfor tilatte område.");
  }
  finally
  {
    // Dette skjer uavhengig om int.Parse feilet eller ikke
    // derfor returnerer vi verdien her.
    // Hvis int.Parse feiler, returnerer vi null
    return val;
  }
}

Denne funksjonen vil komme med feilmeldinger hvis verdien i value ikke lar seg oversette.

For å kaste egne exceptions, bruker man funksjonen throw.

throw new Exception("Hello World!");

Det finnes en rekke exception typer, og man kan definere egne, det er best å lage egne, eller bruke andre framfor å kaste Exception. Grunnen til dette, er at det blir lettere å luke ut feil, og behandle dem på riktig måte, siden try-catch er et filter netopp med dette formålet.

I motsetning til noen andre språk, er det ikke nødvendig å behandle alle feil som kan oppstå.