Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1065 |
| Titel | Geen uitzonderingen genereren op onverwachte locaties |
| Categorie | Ontwerpen |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Een methode die naar verwachting geen uitzonderingen genereert, genereert een uitzondering.
Beschrijving van regel
Methoden die naar verwachting geen uitzonderingen genereren, kunnen als volgt worden gecategoriseerd:
- Methoden voor ophalen van eigenschappen
- Methoden voor gebeurtenistoegang
- Equals-methode
- GetHashCode-methoden
- ToString-methoden
- Statische constructors
- Finalizers
- Verwijdermethoden
- Gelijkheidsoperators
- Impliciete cast-operators
In de volgende secties worden deze methodetypen besproken.
Methoden voor het ophalen van eigenschappen
Eigenschappen zijn in feite slimme velden. Daarom moeten ze zich zo veel mogelijk gedragen als een veld. Velden genereren geen uitzonderingen en mogen geen eigenschappen hebben. Als u een eigenschap hebt die een uitzondering genereert, kunt u overwegen deze een methode te maken.
De volgende uitzonderingen kunnen worden opgeworpen vanuit een property-get-methode:
- System.InvalidOperationException en alle derivaten (inclusief System.ObjectDisposedException)
- System.NotSupportedException en alle derivaten
- System.ArgumentException (alleen van geïndexeerde get)
- System.Collections.Generic.KeyNotFoundException (alleen vanuit een geïndexeerd get-verzoek)
Methoden voor gebeurtenistoegang
Gebeurtenistoegangsmethoden dienen eenvoudige bewerkingen te zijn die geen uitzonderingen genereren. Een gebeurtenis mag geen uitzondering genereren wanneer u een gebeurtenis-handler probeert toe te voegen of te verwijderen.
De volgende uitzonderingen kunnen worden gegenereerd vanuit een gebeurtenistoegangsfunctie:
- System.InvalidOperationException en alle derivaten (inclusief System.ObjectDisposedException)
- System.NotSupportedException en alle derivaten
- System.ArgumentException en derivaten
Equals-methoden
De volgende equals-methoden mogen geen uitzonderingen genereren:
Een Equals methode moet true of false retourneren in plaats van een uitzondering te genereren. Als er bijvoorbeeld twee niet-overeenkomende typen aan Equals worden doorgegeven, moet het gewoon false retourneren in plaats van een ArgumentException op te werpen.
GetHashCode-methoden
De volgende GetHashCode methoden mogen meestal geen uitzonderingen genereren:
GetHashCode moet altijd een waarde retourneren. Anders kunt u items in de hash-tabel kwijtraken.
De versies van GetHashCode die een argument nemen, kunnen een ArgumentException gooien.
Object.GetHashCode Mag echter nooit een uitzondering genereren.
ToString-methoden
Het foutopsporingsprogramma gebruikt System.Object.ToString om informatie over objecten in tekenreeksindeling weer te geven.
ToString Wijzig daarom niet de status van een object en mag geen uitzonderingen genereren.
Statische constructors
Als u uitzonderingen van een statische constructor genereert, wordt het type onbruikbaar in het huidige toepassingsdomein. Je moet een goede reden hebben (zoals een beveiligingsprobleem) voor het werpen van een uitzondering vanuit een statische constructor.
Finalizers
Als u een uitzondering van een finalizer genereert, mislukt de CLR snel, waardoor het proces wordt afgebroken. Vermijd daarom het genereren van uitzonderingen in een finalizer.
Verwijdermethoden
Een System.IDisposable.Dispose methode mag geen uitzondering genereren.
Dispose wordt vaak aangeroepen als onderdeel van de opschoonlogica in een finally clausule. Het expliciet genereren van een uitzondering van Dispose dwingt de gebruiker daarom om uitzonderingsafhandeling toe te voegen in de finally component.
Het Dispose(false) codepad mag nooit uitzonderingen genereren, omdat Dispose bijna altijd vanuit een finalizer wordt aangeroepen.
Gelijkheidsoperators (=, !=)
Net als bij Equals methoden moeten gelijkheidsoperators ofwel true of false teruggeven, en mogen er geen uitzonderingen worden gegooid.
Impliciete cast-operators
Omdat de gebruiker vaak niet weet dat een impliciete cast-operator is aangeroepen, is een uitzondering die wordt gegenereerd door de impliciete cast-operator onverwacht. Daarom mogen er geen uitzonderingen worden gegenereerd van impliciete cast-operators.
Hoe schendingen op te lossen
Voor eigenschaps getters wijzigt u de logica zodat deze geen uitzondering meer hoeft te genereren of wijzigt u de eigenschap in een methode.
Voor alle andere methodetypen die eerder worden vermeld, wijzigt u de logica zodat deze geen uitzondering meer mag genereren.
Wanneer waarschuwingen onderdrukken
Als de schending is veroorzaakt door een uitzonderingsdeclaratie in plaats van een gegenereerde uitzondering, is het veilig om een waarschuwing van deze regel te onderdrukken.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1065
// The code that's violating the rule is on this line.
#pragma warning restore CA1065
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1065.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.