Share via


CA2201: Skapa inte reserverade undantagstyper

Property Värde
Regel-ID CA2201
Rubrik Skapa inte reserverade undantagstyper
Kategori Användning
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En metod genererar en undantagstyp som är för allmän eller som är reserverad av körningen.

Regelbeskrivning

Följande undantagstyper är för allmänna för att ge användaren tillräcklig information:

Följande undantagstyper är reserverade och bör endast genereras av den vanliga språkkörningen:

Utlöser inte allmänna undantag

Om du genererar en allmän undantagstyp, till exempel Exception eller SystemException, i ett bibliotek eller ramverk, tvingar det konsumenterna att fånga upp alla undantag, inklusive okända undantag som de inte vet hur de ska hantera.

I stället genererar du antingen en mer härledd typ som redan finns i ramverket eller skapar en egen typ som härleds från Exception.

Generera specifika undantag

I följande tabell visas vilket undantag som ska utlösas för olika typer av ogiltiga argument, inklusive värdeparametern i set egenskapens accessor.

Argumentet är ogiltigt Undantag
null Referens ArgumentNullException
Utanför det tillåtna intervallet med värden (till exempel ett index för en samling eller lista) ArgumentOutOfRangeException
Ogiltigt enum värde InvalidEnumArgumentException
Innehåller ett format som inte uppfyller parameterspecifikationerna för en metod (till exempel formatsträngen för ToString(String)) FormatException
Annars ogiltigt ArgumentException

I följande tabell visas vilket undantag som ska utlösas för olika typer av ogiltiga åtgärder.

Ogiltig åtgärd Undantag
Åtgärden är ogiltig för det aktuella tillståndet för ett objekt. InvalidOperationException
Åtgärden utförs på ett objekt som har tagits bort. ObjectDisposedException
Åtgärden stöds inte (till exempel i en åsidosätts Stream.Write i en ström som öppnats för läsning). NotSupportedException
Konverteringen skulle resultera i ett spill (till exempel i en explicit överlagring av gjutna operatorer). OverflowException

För alla andra situationer bör du överväga att skapa en egen typ som härleds från Exception och kasta den.

Så här åtgärdar du överträdelser

Om du vill åtgärda en överträdelse av den här regeln ändrar du typen av undantaget som genereras till en viss typ som inte är en av de reserverade typerna.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.