Øvelse – Implementer håndtering af undtagelseshandling med try-catch

Fuldført

Mønsteret try-catch består af en try blok efterfulgt af en eller flere catch delsætninger. Hver catch delsætning angiver handleren for en anden undtagelsestype.

Når der udløses en undtagelse, søger CLR (Common Language Runtime) efter en catch delsætning, der kan håndtere undtagelsen. Hvis den aktuelt udførte metode ikke indeholder en catch delsætning, der kan håndtere den udløste undtagelsestype, søger CLR efter den metode, der kaldte den aktuelle metode. Søgningen fortsætter ned gennem kaldstakken, indtil der findes en passende catch delsætning. Hvis der ikke findes en catch delsætning til håndtering af undtagelsen, viser CLR en ubehandlet undtagelsesmeddelelse til brugeren og stopper udførelsen af programmet.

I denne øvelse skal du implementere et grundlæggende try-catch mønster.

Opret et nyt kodeprojekt

Dit første trin er at oprette et kodeprojekt, som du bruger under dette modul.

  1. Åbn en ny forekomst af Visual Studio Code.

  2. Vælg Åbn mappe i menuen Filer.

  3. Gå til mappen Windows Desktop i dialogboksen Åbn mappe.

  4. Vælg Ny mappe i dialogboksen Åbn mappe.

  5. Navngiv den nye mappe Undtagelser101, og vælg derefter Vælg mappe.

  6. I menuen Terminal skal du vælge Ny terminal.

    Du skal bruge en .NET CLI-kommando til at oprette en ny konsolapp.

  7. Angiv følgende kommandoer ved kommandoprompten i TERMINAL-panelet:

    dotnet new console
    
  8. Luk terminalpanelet.

Implementer en enkel forsøgshent

  1. Brug visningen Visual Studio Code EXPLORER til at åbne filen Program.cs.

  2. Vælg Kommandopalet i menuen Vis.

  3. I kommandoprompten skal du angive .net: g og derefter vælge .NET: Generér aktiver til build og fejlfinding.

  4. Erstat indholdet af filen Program.cs med følgende kode:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    Console.WriteLine(float1 / float2);
    Console.WriteLine(number1 / number2);
    Console.WriteLine("Exit program");
    
  5. Brug et øjeblik på at undersøge koden.

    Bemærk, at programmet bruger to numeriske variabeltyper double og int. Koden udfører en divisionsberegning ved hjælp af begge numeriske typer.

    Udviklere bruger en double typevariabel til beregninger, når præcise brøkværdier er vigtige.

  6. Vælg Start fejlfinding i menuen Kør.

    Bemærk, at der opstår en DivideByZeroException undtagelse, når heltalsværdierne divideres.

    Seddel

    Du har måske bemærket, at ligningen ved hjælp af variabler af typen double kan fuldføres uden at forårsage en fejl. En beregning division-by-zero ved hjælp af double typevariabler returnerer et resultat, der er lig med uendelighed, -uendelighed eller "ikke et tal". Det betyder ikke, at du altid skal bruge double typevariabler i stedet for int eller decimal typer. Den korrekte fremgangsmåde er at bruge variabler af den relevante type og implementere håndtering af undtagelser for at registrere eventuelle fejl, der kan opstå.

  7. Vælg Fortsætpå værktøjslinjen Fejlfinding.

    Skærmbillede, der viser knappen Fortsæt på værktøjslinjen Fejlfinding.

  8. Brug et minut på at undersøge meddelelsesoutputtet for dit program.

    ∞
    Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
       at Program.<Main>$(String[] args) in C:\Users\msuser\Desktop\Exceptions101\Program.cs:line 7
    

    Bemærk, at den ubehandlede undtagelse har fået programmet til at lukke ned, når den første Console.WriteLine() sætning er fuldført.

    Seddel

    Visual Studio Code bruger som standard en anden farvetekst til at vise meddelelser, der er genereret af fejlfindingsprogrammet. Dette hjælper udvikleren med at skelne mellem programoutput og fejlfindingsmeddelelser. Hvis du vil have en renere visning af dit programs output, kan du konfigurere den launch.json fil til at bruge en anden konsol. Angiv f.eks. console til at integratedTerminal bruge TERMINAL-panelet til programoutput. Fejlfindingsmeddelelser vises altid i panelet DEBUG CONSOLE.

  9. Omslut de to beregninger i kodeblokken i en try sætning på følgende måde:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
    Console.WriteLine("Exit program");
    
  10. Bemærk den røde bølgestreg under blokkens højreparentes try .

    C#-syntaks kræver en catch eller-delsætning finally , når du bruger en try sætning.

  11. Opret en catch kodeblok under try kodeblokken på følgende måde:

    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    catch
    {
        Console.WriteLine("An exception has been caught");
    }
    
  12. Vælg Gemi menuen Visual Studio Code File .

  13. Vælg Start fejlfinding i menuen Kør.

  14. Brug et øjeblik på at undersøge det output, som dit program har produceret.

    ∞
    An exception has been caught
    Exit program
    
  15. Bemærk, at selvom undtagelsen stadig forekommer, kan dit program nu afslutte udførelsen af de resterende kodelinjer, før det lukkes.

    Håndtering af undtagelser giver dig mulighed for at styre udførelse af kode, når der opstår undtagelser. Håndtering af undtagelser hjælper med at sikre, at din kode er stabil og giver de forventede resultater.

Fange undtagelser, der er udløst i kaldte metoder

I mange tilfælde fanges en undtagelse på et niveau af opkaldsstakken, der er under det niveau, hvor den blev udløst.

Når der udløses en undtagelse, og den aktuelle metode ikke fanger undtagelsen, vil den almindelige kørsel af sprog fjerne spolingen og søge efter en metode, der indeholder en catch delsætning, der kan håndtere undtagelsen. Den første catch delsætning, der kan håndtere undtagelsen, udføres. Hvis der ikke findes en passende catch delsætning nogen steder i kaldstakken, afslutter kørsel af common language processen og viser en fejlmeddelelse til brugeren.

  1. Erstat koden i Program.cs-filen med følgende kode:

    try
    {
        Process1();
    }
    catch
    {
        Console.WriteLine("An exception has occurred");
    }
    
    Console.WriteLine("Exit program");
    
    static void Process1()
    {
        WriteMessage();
    }
    
    static void WriteMessage()
    {
        double float1 = 3000.0;
        double float2 = 0.0;
        int number1 = 3000;
        int number2 = 0;
    
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
  2. Brug et øjeblik på at gennemse den opdaterede kode.

    • Sætningerne på øverste niveau omfatter den try kodeblok, der kalder Process1() metoden .
    • Metoden Process1() kalder WriteMessage() metoden .
    • Metoden WriteMessage() indeholder den kode, hvor DivideByZeroException undtagelsen udløses.

    Bemærk, at undtagelsen genereres i en metode, der er to kaldstakniveauer over try kodeblokkene og catch .

    Skærmbillede, der viser niveauerne for opkaldsstak mellem det, hvor en undtagelse udløses, og hvor den er fanget.

    Sætninger på øverste niveau repræsenteres som en metode, der er navngivet Main i kaldstakken.

  3. Vælg Gemi menuen Visual Studio Code File .

  4. Vælg Start fejlfinding i menuen Kør.

  5. Brug et øjeblik på at undersøge det output, som dit program har produceret.

    ∞
    An exception has occurred
    Exit program
    
  6. Bemærk, at selvom undtagelsen udløses to niveauer op i opkaldsstakken, håndteres den stadig korrekt.

Resumé

Her er et par vigtige ting, du skal huske fra dette undermodul:

  • Implementer et try-catch mønster til try angivne kodelinjer i dit program, og catch undtagelser, der forekommer inden for kodeblokkens try område.
  • Brug en catch delsætning til at registrere en undtagelse, der udløses på samme niveau i opkaldsstakken.
  • Brug en catch delsætning til at fange en undtagelse, der udløses på et højere niveau af kaldstakken.