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
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örningsfel".

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 try-catch-blocket:

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
Observera

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

Nedan följer 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:

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

Suggested prompts:

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

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örningsfel".

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 try-catch-blocket:

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
Observera

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

Nedan följer 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:

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