Utmaning: Felhantering
try-catch
-syntaxen har en ytterligare syntax som gör det möjligt att fånga specifika typer av fel och hantera dem separat:
index.cs
1234567891011121314151617try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }
Typen Exception
som användes i föregående kapitel fångar alla typer av fel, men det finns vissa undertyper av Exception
som fångar mer specifika feltyper. Nedan följer några vanliga undantagstyper:
DivideByZeroException
: division med noll;FileNotFoundException
: filen som vi försöker komma åt existerar inte;KeyNotFoundException
: nyckeln i ordboken existerar inte;IndexOutOfRangeException
: det angivna indexet för en array eller lista är ogiltigt.
Termen errorVarName
är en variabel som lagrar Exception-objektet och innehåller information som felmeddelandet, vilket kan nås via errorVarName.Message
. Detta kan utelämnas om det inte används:
index.cs
12345678910111213try { // code } catch (ExceptionType) { // code } ... finally { // code }
Här är ett exempel på hur man använder denna typ av try-catch
-block:
index.cs
123456789101112131415161718192021222324252627using System; class Program { static void Main(string[] args) { int[] myArray = { 0, 2, 4, 6, 8, 10 }; int i = 0; while (true) { try { Console.Write(myArray[i] / i + " "); i++; } catch(DivideByZeroException) { i++; } catch(IndexOutOfRangeException) { break; } } } }
Använd nu dessa koncept. Fyll i de tomma fälten med relevanta undantagstyper i följande kod för att slutföra utmaningen.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (___) { break; } catch (___) { numberNames.Add(7, "Seven"); } } } }
Använd relevant undantagstyp för varje catch
-block. Läs koden och förstå vilket catch
-block som är mest lämpligt för att hantera en viss typ av undantag.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; public class HelloWorld { public static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (IndexOutOfRangeException) { break; } catch (KeyNotFoundException) { numberNames.Add(7, "Seven"); } } } }
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
What are the correct exception types to fill in the blanks?
Can you explain why each exception type is used in this context?
Can you give more examples of specific exception types?
Awesome!
Completion rate improved to 2.04
Utmaning: Felhantering
Svep för att visa menyn
try-catch
-syntaxen har en ytterligare syntax som gör det möjligt att fånga specifika typer av fel och hantera dem separat:
index.cs
1234567891011121314151617try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }
Typen Exception
som användes i föregående kapitel fångar alla typer av fel, men det finns vissa undertyper av Exception
som fångar mer specifika feltyper. Nedan följer några vanliga undantagstyper:
DivideByZeroException
: division med noll;FileNotFoundException
: filen som vi försöker komma åt existerar inte;KeyNotFoundException
: nyckeln i ordboken existerar inte;IndexOutOfRangeException
: det angivna indexet för en array eller lista är ogiltigt.
Termen errorVarName
är en variabel som lagrar Exception-objektet och innehåller information som felmeddelandet, vilket kan nås via errorVarName.Message
. Detta kan utelämnas om det inte används:
index.cs
12345678910111213try { // code } catch (ExceptionType) { // code } ... finally { // code }
Här är ett exempel på hur man använder denna typ av try-catch
-block:
index.cs
123456789101112131415161718192021222324252627using System; class Program { static void Main(string[] args) { int[] myArray = { 0, 2, 4, 6, 8, 10 }; int i = 0; while (true) { try { Console.Write(myArray[i] / i + " "); i++; } catch(DivideByZeroException) { i++; } catch(IndexOutOfRangeException) { break; } } } }
Använd nu dessa koncept. Fyll i de tomma fälten med relevanta undantagstyper i följande kod för att slutföra utmaningen.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (___) { break; } catch (___) { numberNames.Add(7, "Seven"); } } } }
Använd relevant undantagstyp för varje catch
-block. Läs koden och förstå vilket catch
-block som är mest lämpligt för att hantera en viss typ av undantag.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; public class HelloWorld { public static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (IndexOutOfRangeException) { break; } catch (KeyNotFoundException) { numberNames.Add(7, "Seven"); } } } }
Tack för dina kommentarer!