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
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!