Feilhåndtering
Du har kanskje støtt på begrepet runtime error i tidligere kapitler. En runtime error er en feil som oppstår mens programmet kjører – derav navnet "runtime"-feil.
Vanligvis, når en runtime-feil oppstår, krasjer programmet eller slutter å svare.
Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men runtime-feil er stort sett uforutsigbare og avhenger ofte av usikre parametere.
For eksempel, hvis filbanen som sendes inn i StreamReader er ugyldig eller ikke eksisterer, vil det gi en runtime-feil og programmet vil krasje. Derfor kan vi ofte plassere slik risikabel kode i try-catch-blokker for å prøve noe kode, og hvis det feiler, fange og håndtere feilen i stedet for at programmet krasjer.
Følgende viser syntaksen for en try-catch-blokk:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception et nøkkelord som representerer datatypen Exception.
Eksempel
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Vi kan utelate (Exception error)-delen fra catch-setningen hvis vi ikke bruker error.
Følgende er noen vanlige tilfeller hvor en kjøretidsfeil kan oppstå:
Divisjon med null
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Ugyldig indeks for en tabell eller en liste
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Nøkkel ikke funnet (for ordbøker):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
finally-blokken
Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er utført. finally-blokken vil alltid bli kjørt etter try- og catch-blokkene, uansett om et unntak ble kastet eller ikke. Dette garanterer at all kode inne i finally kjøres hver gang, noe som gjør den nyttig for oppgaver som å lukke filer eller frigjøre ressurser.
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Hva vil være utdataene fra følgende program?
2. Hva er formålet med finally-blokken i C#?
3. Hvilket av følgende utsagn er sant om try-catch-blokken i C#?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 2.04
Feilhåndtering
Sveip for å vise menyen
Du har kanskje støtt på begrepet runtime error i tidligere kapitler. En runtime error er en feil som oppstår mens programmet kjører – derav navnet "runtime"-feil.
Vanligvis, når en runtime-feil oppstår, krasjer programmet eller slutter å svare.
Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men runtime-feil er stort sett uforutsigbare og avhenger ofte av usikre parametere.
For eksempel, hvis filbanen som sendes inn i StreamReader er ugyldig eller ikke eksisterer, vil det gi en runtime-feil og programmet vil krasje. Derfor kan vi ofte plassere slik risikabel kode i try-catch-blokker for å prøve noe kode, og hvis det feiler, fange og håndtere feilen i stedet for at programmet krasjer.
Følgende viser syntaksen for en try-catch-blokk:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception et nøkkelord som representerer datatypen Exception.
Eksempel
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Vi kan utelate (Exception error)-delen fra catch-setningen hvis vi ikke bruker error.
Følgende er noen vanlige tilfeller hvor en kjøretidsfeil kan oppstå:
Divisjon med null
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Ugyldig indeks for en tabell eller en liste
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Nøkkel ikke funnet (for ordbøker):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
finally-blokken
Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er utført. finally-blokken vil alltid bli kjørt etter try- og catch-blokkene, uansett om et unntak ble kastet eller ikke. Dette garanterer at all kode inne i finally kjøres hver gang, noe som gjør den nyttig for oppgaver som å lukke filer eller frigjøre ressurser.
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Hva vil være utdataene fra følgende program?
2. Hva er formålet med finally-blokken i C#?
3. Hvilket av følgende utsagn er sant om try-catch-blokken i C#?
Takk for tilbakemeldingene dine!