Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1806 |
| Title | Non ignorare i risultati dei metodi |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
Causa
Esistono diversi motivi possibili per questo avviso:
- Viene creato un nuovo oggetto ma non viene mai usato.
- Viene chiamato un metodo che crea e restituisce una nuova stringa e la nuova stringa non viene mai usata.
- Un metodo COM o P/Invoke restituisce un
HRESULTcodice di errore o che non viene mai usato. - Un metodo LINQ (Language Integrated Query) restituisce un risultato che non viene mai usato.
- Viene chiamato un
[Pure]metodo e il valore restituito non viene mai usato.
Descrizione regola
La creazione di oggetti non necessari e l'operazione di Garbage Collection associata dell'oggetto inutilizzato riducono le prestazioni.
Le stringhe sono non modificabili e metodi come String.ToUpper restituiscono una nuova istanza di una stringa anziché modificare l'istanza della stringa nel metodo chiamante.
Ignorare HRESULT o un codice di errore può causare condizioni di risorse basse o un comportamento imprevisto in condizioni di errore.
I metodi e i metodi LINQ annotati con PureAttribute sono noti per non avere effetti collaterali e il risultato non deve essere ignorato.
Come correggere le violazioni
Se un metodo crea una nuova istanza di un oggetto che non viene mai usato, passare l'istanza come argomento a un altro metodo o assegnare l'istanza a una variabile. Se la creazione dell'oggetto non è necessaria, rimuoverla.
oppure
Se il metodo A chiama il metodo B ma non usa la nuova istanza stringa restituita dal metodo B, passare l'istanza come argomento a un altro metodo o assegnare l'istanza a una variabile. In alternativa, rimuovere la chiamata se non è necessaria.
oppure
Se il metodo A chiama il metodo B ma non usa il HRESULT codice di errore o restituito dal metodo, utilizzare il risultato in un'istruzione condizionale, assegnare il risultato a una variabile o passarlo come argomento a un altro metodo.
oppure
Se il metodo A chiama un metodo LINQ o pure B ma non usa il risultato, usare il risultato in un'istruzione condizionale, assegnare il risultato a una variabile o passarlo come argomento a un altro metodo.
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola a meno che l'azione di creazione dell'oggetto non funga da qualche scopo.
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 CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
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.CA1806.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Configurare il codice da analizzare
Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.
Metodi aggiuntivi da applicare
È possibile configurare questa regola per verificare che vengano usati i risultati di API personalizzate aggiuntive. Specificare uno o più metodi come valore dell'opzione additional_use_results_methods . Per specificare più nomi di metodo, separarli con |. I formati consentiti per il nome del metodo sono:
- Solo nome del metodo (che includerà tutti i metodi con tale nome, indipendentemente dal tipo o dallo spazio dei nomi contenitore).
- Nome completo nel formato ID della documentazione, con un prefisso facoltativo
M:.
Ad esempio, per specificare che la regola CA1806 deve anche verificare che il risultato di un metodo denominato MyMethod1 venga usato, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
In alternativa, usare il nome completo per disambiguare o assicurarsi che sia incluso solo un metodo specifico con tale nome.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Esempio 1
Nell'esempio seguente viene illustrata una classe che ignora il risultato della chiamata String.Trima .
public class Book
{
public Book(string title)
{
// Violates this rule.
title?.Trim();
Title = title;
}
public string? Title { get; }
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Nell'esempio seguente viene risolta la violazione assegnando di nuovo il risultato della String.Trim variabile su cui è stato chiamato.
public class Book
{
public Book(string title)
{
// Fixes the violation.
Title = title?.Trim();
}
public string? Title { get; }
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Esempio 2
Nell'esempio seguente viene illustrato un metodo che non usa un oggetto creato.
Nota
Questa violazione non può essere riprodotta in Visual Basic.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Violates this rule.
new Book();
return new Book();
}
}
Nell'esempio seguente viene risolta la violazione rimuovendo la creazione non necessaria di un oggetto .
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Fixes the violation.
return new Book();
}
}