Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Felhantering | Datastrukturer och Filhantering
Quizzes & Challenges
Quizzes
Challenges
/
C# Bortom Grunderna

bookFelhantering

Du har kanske stött på termen körningsfel i tidigare kapitel. Ett körningsfel är ett fel som uppstår medan programmet körs – därav namnet "körnings"-fel.

Vanligtvis, när ett körningsfel inträffar, kraschar programmet eller slutar svara.

Kompilatorn kan hjälpa dig genom att påpeka de flesta felen i vår kod, men körningsfel är oftast oförutsägbara och beror ofta på osäkra parametrar.

Till exempel, om sökvägen till filen som skickas in i StreamReader är ogiltig eller inte existerar, kommer det att ge ett körningsfel och programmet kraschar. Därför kan vi ofta placera sådan riskabel kod i try-catch-block för att försöka köra viss kod, och om det misslyckas, fånga och hantera felet istället för att låta programmet krascha.

Följande är syntaxen för ett try-catch-block:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Här är Exception ett nyckelord som representerar datatypen Exception.

Exempel

index.cs

index.cs

copy
1234567891011121314151617
using 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); } } }
Note
Notering

Vi kan utelämna (Exception error)-delen från catch-satsen om vi inte använder error.

Följande är några vanliga fall där ett körtidsfel kan uppstå:

Division med noll

index.cs

index.cs

copy
123456789101112131415161718
using 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."); } } }

Ogiltigt index för en array eller en lista

index.cs

index.cs

copy
1234567891011121314151617
using 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."); } } }

Nyckel hittades inte (för ordböcker):

index.cs

index.cs

copy
123456789101112131415161718192021
using 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-blocket

Det finns också ett valfritt kodblock som heter finally som körs efter att catch-blocket har körts. finally-blocket kommer alltid att köras efter try- och catch-blocken, oavsett om ett undantag kastades eller inte. Detta garanterar att all kod inuti finally körs varje gång, vilket gör det användbart för uppgifter som att stänga filer eller frigöra resurser.

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using 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. Vad blir utmatningen av följande program?

2. Vad är syftet med finally-blocket i C#?

3. Vilket av följande påståenden är sant angående try-catch-blocket i C#?

question mark

Vad blir utmatningen av följande program?

Select the correct answer

question mark

Vad är syftet med finally-blocket i C#?

Select the correct answer

question mark

Vilket av följande påståenden är sant angående try-catch-blocket i C#?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 9

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.04

bookFelhantering

Svep för att visa menyn

Du har kanske stött på termen körningsfel i tidigare kapitel. Ett körningsfel är ett fel som uppstår medan programmet körs – därav namnet "körnings"-fel.

Vanligtvis, när ett körningsfel inträffar, kraschar programmet eller slutar svara.

Kompilatorn kan hjälpa dig genom att påpeka de flesta felen i vår kod, men körningsfel är oftast oförutsägbara och beror ofta på osäkra parametrar.

Till exempel, om sökvägen till filen som skickas in i StreamReader är ogiltig eller inte existerar, kommer det att ge ett körningsfel och programmet kraschar. Därför kan vi ofta placera sådan riskabel kod i try-catch-block för att försöka köra viss kod, och om det misslyckas, fånga och hantera felet istället för att låta programmet krascha.

Följande är syntaxen för ett try-catch-block:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Här är Exception ett nyckelord som representerar datatypen Exception.

Exempel

index.cs

index.cs

copy
1234567891011121314151617
using 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); } } }
Note
Notering

Vi kan utelämna (Exception error)-delen från catch-satsen om vi inte använder error.

Följande är några vanliga fall där ett körtidsfel kan uppstå:

Division med noll

index.cs

index.cs

copy
123456789101112131415161718
using 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."); } } }

Ogiltigt index för en array eller en lista

index.cs

index.cs

copy
1234567891011121314151617
using 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."); } } }

Nyckel hittades inte (för ordböcker):

index.cs

index.cs

copy
123456789101112131415161718192021
using 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-blocket

Det finns också ett valfritt kodblock som heter finally som körs efter att catch-blocket har körts. finally-blocket kommer alltid att köras efter try- och catch-blocken, oavsett om ett undantag kastades eller inte. Detta garanterar att all kod inuti finally körs varje gång, vilket gör det användbart för uppgifter som att stänga filer eller frigöra resurser.

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using 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. Vad blir utmatningen av följande program?

2. Vad är syftet med finally-blocket i C#?

3. Vilket av följande påståenden är sant angående try-catch-blocket i C#?

question mark

Vad blir utmatningen av följande program?

Select the correct answer

question mark

Vad är syftet med finally-blocket i C#?

Select the correct answer

question mark

Vilket av följande påståenden är sant angående try-catch-blocket i C#?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 9
some-alt