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 | CA1806 |
| Titel | Methodenergebnisse nicht ignorieren. |
| Kategorie | Leistung |
| Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
| Standardmäßig in .NET 10 aktiviert | Als Vorschlag |
Ursache
Es gibt mehrere mögliche Gründe für diese Warnung:
- Ein neues Objekt wird erstellt, aber nie verwendet.
- Eine Methode, die eine neue Zeichenfolge erstellt und zurückgibt, wird aufgerufen, und die neue Zeichenfolge wird nie verwendet.
- Eine COM- oder P/Invoke-Methode gibt einen
HRESULToder Fehlercode zurück, der nie verwendet wird. - Eine LINQ-Methode (Language-Integrated Query) gibt ein Ergebnis zurück, das nie verwendet wird.
- Eine
[Pure]Methode wird aufgerufen, und der Rückgabewert wird nie verwendet.
Regelbeschreibung
Unnötige Objekterstellung und zugeordnete Garbage Collection des nicht verwendeten Objekts setzen die Leistungsfähigkeit herab.
Zeichenfolgen sind unveränderlich, und Methoden wie String.ToUpper geben eine neue Instanz einer Zeichenfolge zurück, anstatt die Instanz der Zeichenfolge in der aufrufenden Methode zu ändern.
Das Ignorieren von HRESULT oder eines Fehlercodes kann zu Bedingungen mit geringen Ressourcen oder unerwartetem Verhalten unter Fehlerbedingungen führen.
LINQ-Methoden und -Methoden, die mit PureAttribute Anmerkungen versehen sind, weisen keine Nebenwirkungen auf, und das Ergebnis sollte nicht ignoriert werden.
Behandeln von Verstößen
Wenn eine Methode eine neue Instanz eines Objekts erstellt, das nicht verwendet wird, übergeben Sie die Instanz als Argument an eine andere Methode, oder weisen Sie die Instanz einer Variablen zu. Wenn die Objekterstellung unnötig ist, entfernen Sie diese.
Oder
Wenn Methode A Methode B aufruft, jedoch nicht die neue Zeichenfolgeninstanz verwendet, die von Methode B zurückgegeben wird, übergeben Sie die Instanz als Argument an eine andere Methode, weisen Sie die Instanz einer Variablen zu. Oder entfernen Sie den Aufruf, sofern er unnötig ist.
Oder
Wenn Methode A Methode B aufruft, jedoch nicht den HRESULT oder Fehlercode verwendet, den die Methode zurückgibt, verwenden Sie das Ergebnis in einer Bedingungsanweisung, weisen Sie das Ergebnis einer Variablen zu, oder übergeben Sie es als Argument an eine andere Methode.
Oder
Wenn Methode A eine LINQ- oder reine Methode B aufruft, aber das Ergebnis nicht verwendet, verwenden Sie das Ergebnis in einer bedingten Anweisung, weisen Sie das Ergebnis einer Variablen zu, oder übergeben Sie sie als Argument an eine andere Methode.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel, es sei denn, das Erstellen des Objekts dient einem bestimmten Zweck.
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 CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der none auf fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Mithilfe der folgenden Option können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Zusätzliche zu erzwingende Methoden
Sie können diese Regel konfigurieren, um zu überprüfen, ob Ergebnisse von zusätzlichen benutzerdefinierten APIs verwendet werden. Geben Sie mindestens eine Methode als Wert der Option additional_use_results_methods an. Um mehrere Methodennamen anzugeben, trennen Sie sie durch |. Es folgen die zulässigen Formate für den Methodennamen:
- Nur Methodenname (schließt alle Methoden mit diesem Namen unabhängig vom enthaltenden Typ oder Namespace ein).
- Vollqualifizierter Name im Format für die Dokumentations-ID, mit dem optionalen Präfix
M:.
Um beispielsweise anzugeben, dass die Regel CA1806 auch prüfen soll, ob das Ergebnis einer Methode namens MyMethod1 verwendet wird, fügen Sie das folgende Schlüssel-Wert-Paar zur Datei .editorconfig in Ihrem Projekt hinzu.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Oder verwenden Sie den vollqualifizierten Namen, um Eindeutigkeit zu gewährleisten oder sicherzustellen, dass nur eine bestimmte Methode mit diesem Namen enthalten ist.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Beispiel 1
Das folgende Beispiel zeigt eine Klasse, die das Ergebnis des Aufrufs von String.Trim ignoriert.
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
Im folgenden Beispiel wird die Verletzung behoben, indem das Ergebnis der String.Trim zurück zu der Variablen zugewiesen wurde, für die sie aufgerufen wurde.
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
Beispiel 2
Das folgende Beispiel zeigt eine Methode, die kein von ihr erstelltes Objekt verwendet.
Hinweis
Dieser Verstoß kann in Visual Basic nicht reproduziert werden.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Violates this rule.
new Book();
return new Book();
}
}
Im folgenden Beispiel wird die Verletzung behoben, indem die unnötige Erstellung eines Objekts entfernt wird.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Fixes the violation.
return new Book();
}
}