CA2201: Skapa inte reserverade undantagstyper
Property | Värde |
---|---|
Regel-ID | CA2201 |
Title | Skapa inte reserverade undantagstyper |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | 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:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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 hänvisning |
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.