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

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

index.cs

1234567891011121314151617
try { // 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:

  1. DivideByZeroException: division med noll;
  2. FileNotFoundException: filen som vi försöker komma åt existerar inte;
  3. KeyNotFoundException: nyckeln i ordboken existerar inte;
  4. 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

index.cs

12345678910111213
try { // code } catch (ExceptionType) { // code } ... finally { // code }

Här är ett exempel på hur man använder denna typ av try-catch-block:

index.cs

index.cs

123456789101112131415161718192021222324252627
using 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

index.cs

1234567891011121314151617181920212223242526272829303132333435
using 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

index.cs

1234567891011121314151617181920212223242526272829303132333435
using 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"); } } } }
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7

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

Avsnitt 1. Kapitel 7
some-alt