CA1513: Usare l'helper throw ObjectDisposedException
Proprietà | valore |
---|---|
ID regola | CA1513 |
Title | Usare l'helper throw ObjectDisposedException |
Categoria | Manutenibilità |
La correzione causa un'interruzione o meno | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
Il codice controlla se un oggetto viene eliminato e quindi genera in modo condizionale un oggetto ObjectDisposedException.
Descrizione regola
I controlli degli oggetti hanno un impatto significativo sulle dimensioni del codice e spesso dominano il codice per funzioni e setter di proprietà di piccole dimensioni. Questi controlli impediscono l'inlining e causano un notevole inquinamento da cache delle istruzioni. I metodi helper throw, ad ThrowIf esempio, sono più semplici ed efficienti rispetto ai if
blocchi che costruiscono una nuova istanza di eccezione.
Esempio
Il frammento di codice seguente mostra una violazione di CA1513:
class C
{
private bool _disposed = false;
void M()
{
if (_disposed)
throw new ObjectDisposedException(GetType().Name);
}
}
Il frammento di codice seguente mostra la correzione:
class C
{
private bool _disposed = false;
void M()
{
ObjectDisposedException.ThrowIf(_disposed, this);
}
}
Come correggere le violazioni
Sostituire il if
blocco che genera l'eccezione con una chiamata a ThrowIf. In alternativa, in Visual Studio, usare il menu lampadina per correggere automaticamente il codice.
Quando eliminare gli avvisi
È possibile eliminare una violazione di questa regola se non si è preoccupati per la manutenibilità del codice. È anche bene eliminare le violazioni identificate come falsi positivi.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1513
// The code that's violating the rule is on this line.
#pragma warning restore CA1513
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1513.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.