Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA2015 |
| Titel | Keine Finalizer für von MemoryManager <T> abgeleitete Typen definieren |
| Kategorie | Zuverlässigkeit |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Warnung |
| Anwendbare Sprachen | C# und Visual Basic |
Ursache
Definieren von Finalizern für von MemoryManager<T> abgeleitete Typen
Regelbeschreibung
Das Hinzufügen eines Finalizers zu einem von MemoryManager<T> abgeleiteten Typ ist wahrscheinlich ein Hinweis auf einen Fehler, da es darauf hindeutet, dass eine native Ressource, die in einem Span<T> hätte ausgegeben werden können, bereinigt wird, während sie möglicherweise noch von dem Span<T> genutzt wird.
Hinweis
Die MemoryManager<T>-Klasse ist für weiterführende Szenarios bestimmt. Die meisten Entwickler benötigen sie nicht.
So beheben Sie Verstöße
Entfernen Sie die Finalizer-Definition, um den Verstoß zu korrigieren.
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);
}
Wann sollten Warnungen unterdrückt werden?
Es ist in Ordnung, einen Verstoß gegen diese Regel zu unterdrücken, wenn ein Finalizer zum Debuggen oder zum Prüfen erstellt werden soll.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none
Um diese gesamte Kategorie von Regeln zu deaktivieren, legen Sie den Schweregrad für die Kategorie auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.