Øvelse – Implementer håndtering af undtagelseshandling med try-catch
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.
Åbn en ny forekomst af Visual Studio Code.
Vælg Åbn mappe i menuen Filer.
Gå til mappen Windows Desktop i dialogboksen Åbn mappe.
Vælg Ny mappe i dialogboksen Åbn mappe.
Navngiv den nye mappe Undtagelser101, og vælg derefter Vælg mappe.
I menuen Terminal skal du vælge Ny terminal.
Du skal bruge en .NET CLI-kommando til at oprette en ny konsolapp.
Angiv følgende kommandoer ved kommandoprompten i TERMINAL-panelet:
dotnet new consoleLuk terminalpanelet.
Implementer en enkel forsøgshent
Brug visningen Visual Studio Code EXPLORER til at åbne filen Program.cs.
Vælg Kommandopalet i menuen Vis.
I kommandoprompten skal du angive .net: g og derefter vælge .NET: Generér aktiver til build og fejlfinding.
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");Brug et øjeblik på at undersøge koden.
Bemærk, at programmet bruger to numeriske variabeltyper
doubleogint. Koden udfører en divisionsberegning ved hjælp af begge numeriske typer.Udviklere bruger en
doubletypevariabel til beregninger, når præcise brøkværdier er vigtige.Vælg Start fejlfinding i menuen Kør.
Bemærk, at der opstår en
DivideByZeroExceptionundtagelse, når heltalsværdierne divideres.Seddel
Du har måske bemærket, at ligningen ved hjælp af variabler af typen
doublekan fuldføres uden at forårsage en fejl. En beregning division-by-zero ved hjælp afdoubletypevariabler returnerer et resultat, der er lig med uendelighed, -uendelighed eller "ikke et tal". Det betyder ikke, at du altid skal brugedoubletypevariabler i stedet forintellerdecimaltyper. 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å.Vælg Fortsætpå værktøjslinjen Fejlfinding.
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 7Bemæ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.
consoletil atintegratedTerminalbruge TERMINAL-panelet til programoutput. Fejlfindingsmeddelelser vises altid i panelet DEBUG CONSOLE.Omslut de to beregninger i kodeblokken i en
trysæ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");Bemærk den røde bølgestreg under blokkens højreparentes
try.C#-syntaks kræver en
catcheller-delsætningfinally, når du bruger entrysætning.Opret en
catchkodeblok undertrykodeblokken på følgende måde:try { Console.WriteLine(float1 / float2); Console.WriteLine(number1 / number2); } catch { Console.WriteLine("An exception has been caught"); }Vælg Gemi menuen Visual Studio Code File .
Vælg Start fejlfinding i menuen Kør.
Brug et øjeblik på at undersøge det output, som dit program har produceret.
∞ An exception has been caught Exit programBemæ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.
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); }Brug et øjeblik på at gennemse den opdaterede kode.
- Sætningerne på øverste niveau omfatter den
trykodeblok, der kalderProcess1()metoden . - Metoden
Process1()kalderWriteMessage()metoden . - Metoden
WriteMessage()indeholder den kode, hvorDivideByZeroExceptionundtagelsen udløses.
Bemærk, at undtagelsen genereres i en metode, der er to kaldstakniveauer over
trykodeblokkene ogcatch.
Sætninger på øverste niveau repræsenteres som en metode, der er navngivet
Maini kaldstakken.- Sætningerne på øverste niveau omfatter den
Vælg Gemi menuen Visual Studio Code File .
Vælg Start fejlfinding i menuen Kør.
Brug et øjeblik på at undersøge det output, som dit program har produceret.
∞ An exception has occurred Exit programBemæ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-catchmønster tiltryangivne kodelinjer i dit program, ogcatchundtagelser, der forekommer inden for kodeblokkenstryområde. - Brug en
catchdelsætning til at registrere en undtagelse, der udløses på samme niveau i opkaldsstakken. - Brug en
catchdelsætning til at fange en undtagelse, der udløses på et højere niveau af kaldstakken.