Använda standardfeltyper
Kommentar
Det här innehållet skrivs om med behörighet från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Den utgåvan publicerades 2008, och boken har sedan dess reviderats helt i den tredje utgåvan. En del av informationen på den här sidan kan vara inaktuell.
I det här avsnittet beskrivs de standardfel som tillhandahålls av ramverket och information om deras användning. Listan är inte på något sätt fullständig. Se referensdokumentationen för .NET Framework för användning av andra framework-undantagstyper.
Undantag och SystemException
❌ Kasta INTE System.Exception eller System.SystemException.
❌ Fånga System.Exception
INTE eller System.SystemException
i ramverkskod, såvida du inte tänker återväxa.
❌ UNDVIK att fånga System.Exception
eller System.SystemException
, förutom i undantagshanterare på toppnivå.
ApplicationException
❌ Kasta INTE eller härled inte från ApplicationException.
InvalidOperationException
✔️ Utlöser ett InvalidOperationException om objektet är i ett olämpligt tillstånd.
ArgumentException, ArgumentNullException och ArgumentOutOfRangeException
✔️ ArgumentException Kasta eller någon av dess undertyper om dåliga argument skickas till en medlem. Föredrar den mest härledda undantagstypen, om tillämpligt.
✔️ Ange egenskapen ParamName
när du genererar en av underklasserna ArgumentException
i .
Den här egenskapen representerar namnet på parametern som orsakade att undantaget utlöstes. Observera att egenskapen kan anges med någon av konstruktorns överlagringar.
✔️ Använd value
för namnet på den implicita värdeparametern för egenskapsuppsättningar.
NullReferenceException, IndexOutOfRangeException och AccessViolationException
❌ Tillåt INTE offentligt anropsbara API:er att uttryckligen eller implicit kasta NullReferenceException, AccessViolationExceptioneller IndexOutOfRangeException. Dessa undantag reserveras och genereras av körningsmotorn och indikerar i de flesta fall en bugg.
Gör argumentkontroll för att undvika att utlösa dessa undantag. Om du utlöser dessa undantag visas implementeringsinformation om din metod som kan ändras över tid.
StackOverflowException
❌ Kasta INTE uttryckligen StackOverflowException. Undantaget bör uttryckligen endast genereras av CLR.
❌ Fånga StackOverflowException
INTE .
Det är nästan omöjligt att skriva hanterad kod som förblir konsekvent i närvaro av godtyckliga stackspill. De ohanterade delarna i CLR förblir konsekventa genom att använda avsökningar för att flytta stackspill till väldefinierade platser i stället för genom att säkerhetskopiera från godtyckliga stackspill.
OutOfMemoryException
❌ Kasta INTE uttryckligen OutOfMemoryException. Det här undantaget ska endast genereras av CLR-infrastrukturen.
ComException, SEHException och ExecutionEngineException
❌ Kasta INTE uttryckligen COMException, ExecutionEngineExceptionoch SEHException. Dessa undantag ska endast genereras av CLR-infrastrukturen.
Portioner © 2005, 2009 Microsoft Corporation. Med ensamrätt.
Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, publicerad 22 okt 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.