CA2201: geen gereserveerde uitzonderingstypen genereren

Eigenschap Waarde
Regel-id CA2201
Titel Voorkom het opwerpen van gereserveerde uitzonderingstypen
Categorie Gebruik
Fix kan brekend of niet-brekend zijn Onderbreking
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

Oorzaak

Een methode genereert een uitzonderingstype dat te algemeen is of die is gereserveerd door de runtime.

Beschrijving van regel

De volgende uitzonderingstypen zijn te algemeen om voldoende informatie aan de gebruiker te verstrekken:

De volgende uitzonderingstypen zijn gereserveerd en mogen alleen worden opgeworpen door de Common Language Runtime.

Gooi geen algemene uitzonderingen

Als u een algemeen uitzonderingstype genereert, zoals Exception of SystemException, in een bibliotheek of framework, dwingt het consumenten om alle uitzonderingen te ondervangen, inclusief onbekende uitzonderingen die ze niet weten hoe ze moeten omgaan.

In plaats daarvan genereert u een meer afgeleid type dat al bestaat in het framework of maakt u uw eigen type dat is afgeleid van Exception.

Specifieke uitzonderingen genereren

In de volgende tabel ziet u welke uitzondering moet worden gegenereerd voor verschillende typen ongeldige argumenten, inclusief de waardeparameter in de set accessor van een eigenschap.

Ongeldig argument Uitzondering
null referentie ArgumentNullException
Buiten het toegestane bereik van waarden (zoals een index voor een verzameling of lijst) ArgumentOutOfRangeException
Ongeldige enum waarde InvalidEnumArgumentException
Bevat een indeling die niet voldoet aan de parameterspecificaties van een methode (zoals de notatietekenreeks voor ToString(String)) FormatException
Anders ongeldig ArgumentException

In de volgende tabel ziet u welke uitzondering moet worden gegenereerd voor verschillende typen ongeldige bewerkingen.

Ongeldige bewerking Uitzondering
De bewerking is ongeldig voor de huidige status van een object. InvalidOperationException
Bewerking wordt uitgevoerd op een object dat is verwijderd. ObjectDisposedException
Bewerking wordt niet ondersteund (zoals bij een Stream.Write tijdens een override in een stream die open is voor lezen). NotSupportedException
Conversie zou resulteren in een overloop (zoals bij een expliciete overbelasting van een cast-operator). OverflowException

Voor alle andere situaties kunt u overwegen om uw eigen type te maken dat is afgeleid van Exception en dat te gebruiken.

Hoe schendingen op te lossen

Als u een schending van deze regel wilt oplossen, wijzigt u het type gegenereerde uitzondering in een specifiek type dat niet een van de gereserveerde typen is.

Example

// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...

// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...

// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }

// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.