Delen via


CA1065: Geen uitzonderingen genereren op onverwachte locaties

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:

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:

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.

Zie ook