CA2015: Definiera inte finalizers för typer som härleds från MemoryManager<T>

Property Värde
Regel-ID CA2015
Title Definiera inte finalizers för typer som härletts från MemoryManager<T>
Kategori Tillförlitlighet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som varning

Orsak

Definiera finalizers för typer som härletts från MemoryManager<T>

Regelbeskrivning

Att lägga till en finalizer till en typ som härletts från MemoryManager<T> är sannolikt en indikation på en bugg, eftersom det antyder att en intern resurs som kan ha delats ut i en Span<T> rensas och eventuellt medan den fortfarande används av Span<T>.

Kommentar

Klassen MemoryManager<T> är avsedd för avancerade scenarier. De flesta utvecklare behöver inte använda det.

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

Du kan åtgärda överträdelsen genom att ta bort slutlösningsdefinitionen.

class DerivedClass <T> : MemoryManager<T>
{
    public override bool Dispose(bool disposing)
    {
        if (disposing)
        {
            _handle.Dispose();
        }
    }

    ...

    // Violation occurs, remove the finalizer to fix the warning.
    ~DerivedClass() => Dispose(false);
}

När du ska ignorera varningar

Det är säkert att förhindra en överträdelse av den här regeln om avsikten är att skapa en slutförare för felsökning eller validering.

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 CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015

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.CA2015.severity = none

Om du vill inaktivera hela den här regelkategorin anger du allvarlighetsgraden för kategorin till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none

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

Se även