Feilhåndtering
Du har kanskje støtt på begrepet kjøretidsfeil i tidligere kapitler. En kjøretidsfeil er en feil som oppstår mens programmet kjører – derav navnet "kjøretidsfeil".
Vanligvis, når en kjøretidsfeil oppstår, krasjer programmet eller slutter å svare.
Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men kjøretidsfeil 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 oppstå en kjøretidsfeil 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 er 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 matrise 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"); } } }
Blokken finally
Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er kjørt:
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
Can you explain how the try-catch block works with an example?
What are some best practices for handling runtime errors?
Can you list other common runtime errors besides the ones mentioned?
Awesome!
Completion rate improved to 2.04
Feilhåndtering
Sveip for å vise menyen
Du har kanskje støtt på begrepet kjøretidsfeil i tidligere kapitler. En kjøretidsfeil er en feil som oppstår mens programmet kjører – derav navnet "kjøretidsfeil".
Vanligvis, når en kjøretidsfeil oppstår, krasjer programmet eller slutter å svare.
Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men kjøretidsfeil 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 oppstå en kjøretidsfeil 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 er 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 matrise 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"); } } }
Blokken finally
Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er kjørt:
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!