CA1513: Använd ObjectDisposedException throw helper

Egenskap Värde
Regel-ID CA1513
Title Använd ObjectDisposedException för att skapa ett kastverktyg
Kategori Underhåll
Korrigeringen är antingen invasiv eller icke-invasiv Nobrytande
Aktiverad som standard i .NET 10 Som förslag
Tillämpliga språk C# och Visual Basic

Orsak

Kod kontrollerar om ett objekt tas bort och sedan villkorligt genererar en ObjectDisposedException.

Regelbeskrivning

Objektkontroller har en betydande inverkan på kodstorleken och dominerar ofta koden för små funktioner och egenskapsuppsättningar. Dessa kontroller förhindrar inlining och orsakar betydande kontaminering av instruktionscachen. Throw-helper-metoder som ThrowIf är enklare och effektivare än if block som konstruerar en ny undantagsinstans.

Exempel

Följande kodfragment visar ett brott mot CA1513:

class C
{
    private bool _disposed = false;
    void M()
    {
        if (_disposed)
            throw new ObjectDisposedException(GetType().Name);
    }
}

Följande kodfragment visar korrigeringen:

class C
{
    private bool _disposed = false;
    void M()
    {
        ObjectDisposedException.ThrowIf(_disposed, this);
    }
}

Så här åtgärdar du överträdelser

Ersätt blocket if som utlöser undantaget med ett anrop till ThrowIf. I Visual Studio kan du också använda glödlampans meny för att korrigera koden automatiskt.

När du ska ignorera varningar

Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om kodens underhållbarhet. Det är också bra att undertrycka överträdelser som identifieras som falska positiva.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1513
// The code that's violating the rule is on this line.
#pragma warning restore CA1513

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1513.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.