CA1862: Verwenden der Überladungen der Methode „StringComparison“, um Vergleiche zwischen Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen

Eigenschaft Wert
Regel-ID CA1862
Titel Verwenden der Überladungen der Methode „StringComparison“, um Vergleiche zwischen Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 9 aktiviert Als Vorschlag

Ursache

Der Code vergleicht zwei Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung, indem zuerst ToLower(), ToLowerInvariant(), ToUpper() oder ToUpperInvariant() für eine oder beide Zeichenfolgen aufgerufen werden.

Regelbeschreibung

Wenn der Code ToLower(), ToLowerInvariant(), ToUpper() oder ToUpperInvariant() aufruft, wird eine Zuordnung ausgeführt. Wenn der einzige Grund für das Aufrufen dieser Methoden darin besteht, einen Vergleich von oder eine Suche nach Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, ist die Zuordnung unnötig. Stattdessen können Sie eine Methode zum Vergleichen von Zeichenfolgen aufrufen, die einen StringComparison verwendet und einen der *IgnoreCase-Werte angibt.

Behandeln von Verstößen

Entfernen Sie den Aufruf von ToLower(), ToLowerInvariant(), ToUpper() oder ToUpperInvariant(), und rufen Sie entweder eine der StringComparer-Methoden oder eine der folgenden Methoden, die ein StringComparison-Argument verwendet, auf:

Hinweis

  • Wenn Sie Ihren Code so ändern, dass eine Überladung verwendet wird, die ein StringComparison-Argument verwendet, kann dies zu subtilen Verhaltensänderungen führen. Es ist wichtig, dass Sie gründliche Tests durchführen, wenn Sie diese Änderung vornehmen oder den Lightbulb-Vorschlag von Visual Studio akzeptieren.
  • Wenn die Zeichenfolgen nicht in einer kulturell sensiblen Weise verglichen werden müssen, erwägen Sie die Übergabe von StringComparison.OrdinalIgnoreCase.

Beispiel

Das folgende Beispiel zeigt einen Verstoß gegen die Regel:

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

Das folgende Beispiel zeigt eine Möglichkeit, den Verstoß zu beheben:

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, eine Warnung aus dieser Regel zu unterdrücken, wenn Leistung kein Grund zur Besorgnis ist.

Wenn Sie Entity Framework Core (EF Core) verwenden, sollten Sie diese Regel für Szenarien unterdrücken, in denen Sie eine Datenbank abfragen, indem Sie eine Zeichenfolge vergleichen. EF Core löst eine Ausnahme aus, wenn Sie eine Methode wie String.Equals(String, StringComparison) verwenden, die ein StringComparison-Argument akzeptiert, da diese Abfragen nicht in SQL übersetzt werden. Weitere Informationen finden Sie unter Übersetzung integrierter .NET-Zeichenfolgenvorgänge.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

[*.{cs,vb}]
dotnet_diagnostic.CA1862.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.