Share via


CA1065: Geen uitzonderingen genereren op onverwachte locaties

Eigenschappen Weergegeven als
Regel-id CA1065
Titel Geen uitzonderingen genereren op onverwachte locaties
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

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
  • Is gelijk aan methoden
  • GetHashCode-methoden
  • ToString-methoden
  • Statische constructors
  • Finalizers
  • Methoden verwijderen
  • Gelijkheidsoperators
  • Impliciete cast-operators

In de volgende secties worden deze methodetypen besproken.

Methoden voor 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 gegenereerd vanuit een get-methode voor eigenschappen:

Methoden voor gebeurtenistoegang

Gebeurtenistoegangsors moeten eenvoudige bewerkingen 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:

Is gelijk aan methoden

De volgende equals-methoden mogen geen uitzonderingen genereren:

Een Equals methode moet een uitzondering retourneren true of false in plaats van een uitzondering te genereren. Als Equals er bijvoorbeeld twee niet-overeenkomende typen worden doorgegeven, moet deze alleen worden geretourneerd false in plaats van een ArgumentException.

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 verliezen.

De versies van GetHashCode die een argument kunnen een ArgumentException. 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. U moet een goede reden hebben (zoals een beveiligingsprobleem) voor het genereren van een uitzondering van 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.

Methoden verwijderen

Een System.IDisposable.Dispose methode mag geen uitzondering genereren. Dispose wordt vaak aangeroepen als onderdeel van de opschoonlogica in een finally component. 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 Equals bij methoden moeten gelijkheidsoperators ofwel ofwel truefalse, 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.

Schendingen oplossen

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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Zie ook