Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 utlöses på grund av ett fel i koden eller i koden som du anropar (till exempel ett delat bibliotek), otillgängliga operativsystemresurser, oväntade villkor som körningen stöter på (till exempel kod som inte kan verifieras) och så vidare. Din ansökan kan återhämta sig från vissa av dessa tillstånd, men inte från andra. Även om du kan hantera de flesta programavvikelser, kan du inte hantera de flesta körningsavvikelser.
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 det eller programmet avslutas.
Undantag jämfört med traditionella metoder för felhantering
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 ingen särskild språksyntax för att hantera undantag, men tillåter varje språk att definiera sin egen syntax.
Undantag kan kastas över processer 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 felmeddelande, till exempel returkoder. Fel går inte obemärkt förbi eftersom om ett undantag utlöses och du inte hanterar det avslutar programkörningen ditt program. 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 av det här undantaget). |
IndexOutOfRangeException | Kastas endast av runtime när en array indexeras felaktigt. | Indexera en matris utanför dess giltiga intervall: arr[arr.Length+1] |
NullReferenceException | Endast genereras av körtidssystemet när ett null-objekt refereras till. | object o = null; o.ToString(); |
InvalidOperationException | Kastas av metoder när de är 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 argumentundantag. | Ingen (använd en härledd klass av det här undantaget). |
ArgumentNullException | Utlöses 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 i ett visst intervall. | String s = "string"; s.Substring(s.Length+1); |
Se även
- Undantagsklass och egenskaper
- Så här gör du: Använd Try-Catch-blocket för att fånga undantag
- Så här: Använd specifika undantag i ett catchblock
- Så här gör du: Uttryckligen utlösa undantag
- Gör så här: Skapa User-Defined undantag
- Använda User-Filtered undantagshanterare
- Så här gör du: Använd finally-block
- Hantering av COM-interoperabilitetsundantag
- Metodtips för undantag
- Vad varje utvecklare behöver veta om undantag i körmiljön