Felhantering
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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Här är Exception
ett nyckelord som representerar datatypen Exception.
Exempel
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 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
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."); } } }
Ogiltigt index för en array eller en lista
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."); } } }
Nyckel hittades inte (för ordböcker):
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-blocket
Det finns också ett valfritt kodblock som heter finally
som körs efter att catch
-blocket har körts:
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. 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#?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Felhantering
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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Här är Exception
ett nyckelord som representerar datatypen Exception.
Exempel
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 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
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."); } } }
Ogiltigt index för en array eller en lista
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."); } } }
Nyckel hittades inte (för ordböcker):
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-blocket
Det finns också ett valfritt kodblock som heter finally
som körs efter att catch
-blocket har körts:
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. 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#?
Tack för dina kommentarer!