Hantera och utlösa undantag i .NET

Program måste kunna hantera fel som inträffar under körningen på ett konsekvent sätt. .NET tillhandahåller en modell för att meddela program om fel på ett enhetligt sätt: .NET-åtgärder indikerar fel genom att utlösa undantag.

Undantag

Ett undantag är ett feltillstånd eller oväntat beteende som påträffas av ett program som körs. Undantag kan genereras på grund av ett fel i koden eller i koden som du anropar (till exempel ett delat bibliotek), otillgängliga operativsystemresurser, oväntade förhållanden som körningen påträffar (till exempel kod som inte kan verifieras) och så vidare. Ditt program kan återställas från vissa av dessa villkor, men inte från andra. Även om du kan återställa från de flesta programund undantag, kan du inte återställa från de flesta körningsundatag.

I .NET är ett undantag ett objekt som ärver från System.Exception klassen . Ett undantag genereras från ett kodområde där ett problem har uppstått. Undantaget skickas upp i stacken tills programmet hanterar den eller programmet avslutas.

Undantag jämfört med traditionella felhanteringsmetoder

Traditionellt förlitade sig ett språks felhanteringsmodell antingen på språkets unika sätt att identifiera fel och hitta hanterare för dem, eller på den felhanteringsmekanism som tillhandahålls av operativsystemet. Det sätt på vilket .NET implementerar undantagshantering ger följande fördelar:

  • Undantagskastning och hantering fungerar på samma sätt för .NET-programmeringsspråk.

  • Kräver inte någon särskild språksyntax för att hantera undantag, men tillåter varje språk att definiera sin egen syntax.

  • Undantag kan genereras över process- och till och med datorgränser.

  • Kod för undantagshantering kan läggas till i ett program för att öka programmets tillförlitlighet.

Undantag ger fördelar jämfört med andra metoder för felmeddelanden, till exempel returkoder. Felen går inte obemärkt förbi eftersom om ett undantag utlöses och du inte hanterar det avslutar körningen programmet. Ogiltiga värden fortsätter inte att spridas genom systemet till följd av kod som inte kan söka efter en felreturkod.

Vanliga undantag

I följande tabell visas några vanliga undantag med exempel på vad som kan orsaka dem.

Undantagstyp Beskrivning Exempel
Exception Basklass för alla undantag. Ingen (använd en härledd klass för det här undantaget).
IndexOutOfRangeException Genereras endast av körningen när en matris indexeras felaktigt. Indexera en matris utanför dess giltiga intervall:
arr[arr.Length+1]
NullReferenceException Genereras endast av körningen när ett null-objekt refereras till. object o = null;
o.ToString();
InvalidOperationException Utlöses av metoder i ett ogiltigt tillstånd. Anropar Enumerator.MoveNext() när du har tagit bort ett objekt från den underliggande samlingen.
ArgumentException Basklass för alla argument-undantag. Ingen (använd en härledd klass för det här undantaget).
ArgumentNullException Genereras av metoder som inte tillåter att ett argument är null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Utlöses av metoder som verifierar att argumenten finns inom ett visst intervall. String s = "string";
s.Substring(s.Length+1);

Se även