Felhantering är en inbyggd mekanism i .NET framework och används för att upptäcka och hantera fel som uppstår när kod körs. Dessa fel kan uppstå p.g.a. en massa olika orsaker, felaktig kod, logikfel m.m.
I C# så finns det tre keywords, try, catch, finally som används för att sköta felhanteringen. Inom try så lägger du koden du vill hantera, i catch så fångar du felet och hanterar det och finally används om du vill göra något oavsett om ett fel uppstod eller inte. Se exempel nedan.
try
{
// Här skriver vi kod som kan generera ett fel
}
catch(Exception)
{
// Inom catch så hanterar vi felet
}
finally
{
// Hit kommer vi oavsett om det uppstår något fel eller inte
}
Om det uppstår något fel inom try-blocket så hamnar vi i catch och sedan i finally där vi kan utföra eventuell städning av objekt, stängning av databaskopplingar eller vad det nu kan vara. Klassen Exception är basen för alla Exceptions vilket innebär att vi kommer att fånga alla undantag som kastas där oavsett vilken typ det är av.
Vill du göra olika saker beroende på vilket fel som uppstått så kan du ha flera catch-block. Se exempel nedan.
try
{
// Här skriver vi kod som kan generera ett fel
}
catch(NullReferenceException)
{
// Skulle det uppstå ett NullReferenceException så hamnar vi här
}
catch(Exception)
{
// Annars hamnar vi här
}
finally
{
// Hit kommer vi oavsett om det uppstår något fel eller inte
}
Vi ska i nästa steg kika på ett riktigt exempel där det uppstår ett fel.
try
{
int x = 0;
Response.Write("15/0 blir " + (15 / x));
}
catch (Exception ex)
{
Response.Write("Följande fel uppstod: " + ex.Message);
}
Denna kodrad kommer att generera felmeddelandet "Följande fel uppstod: Attempted to divide with zero." och talar om för oss att vi försökt dela ett tal med noll vilket så klart inte går. Observera att jag skapat variabeln ex i min catch för att kunna skriva ut felmeddelandet. Anledningen till att jag deklarerat variabeln x är att det annars kommer att uppstå ett kompileringsfel då det inte är tillåtet att dela med 0.
Varför ska man då använda felhantering? Exceptions ger dig ett mycket kraftfullt verktyg genom vilket du kan kommunicera de fel som uppstår på ett bra sätt istället för att användarna möts av en krashad sida. Du får även möjlighet att göra dig av med dina objekt vid eventuella fel så inte dessa ligger kvar och tar upp minne.
Detta var en riktig snabblektion i felhantering. Hoppas du fått ut något av det iallafall.