Share via


CA1862: Použití přetížení metody StringComparison k provádění porovnání řetězců bez rozlišování velkých a malých písmen

Vlastnost Hodnota
ID pravidla CA1862
Název Pomocí přetížení metody StringComparison proveďte porovnání řetězců bez rozlišování velkých a malých písmen.
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Kód porovnává dva řetězce nerozlišující malá a velká písmena prvním voláním ToLower(), ToLowerInvariant(), ToUpper()nebo ToUpperInvariant() u jednoho nebo obou řetězců.

Popis pravidla

Při volání ToLower()kódu , ToLowerInvariant(), ToUpper()nebo ToUpperInvariant(), přidělení je provedeno. Pokud je jediným důvodem volání těchto metod porovnání řetězců nerozlišující velká a malá písmena nebo vyhledávání, přidělení není nutné. Místo toho můžete volat metodu porovnání řetězců, která přebírá StringComparison a určuje jednu z *IgnoreCase hodnot.

Jak opravit porušení

Odeberte volání ToLower(), , ToLowerInvariant()ToUpper(), nebo ToUpperInvariant(), a buď volání jedné z StringComparer metod, nebo jednu z následujících metod, která přebírá StringComparison argument:

Poznámka:

  • Pokud změníte kód tak, aby používal přetížení, které přebírá StringComparison argument, může způsobit drobné změny chování. Je důležité provést důkladné testování, pokud provedete tuto změnu nebo přijmete návrh žárovky sady Visual Studio.
  • Pokud řetězce není potřeba porovnávat kulturně citlivým způsobem, zvažte předání StringComparison.OrdinalIgnoreCase.

Příklad

Následující příklad ukazuje porušení pravidla:

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())

Následující příklad ukazuje kód, který řeší porušení zásad:

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)

Kdy potlačit upozornění

Pokud výkon není problém, je bezpečné potlačit upozornění z tohoto pravidla.

Pokud používáte Entity Framework Core (EF Core), měli byste toto pravidlo potlačit pro scénáře, ve kterých dotazujete databázi porovnáním řetězce. EF Core vyvolá výjimku, pokud použijete metodu, jako String.Equals(String, StringComparison)StringComparison je například argument, protože nepřeloží takové dotazy do SQL. Další informace najdete v tématu Překlad předdefinovaných operací řetězců .NET.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA1862
// The code that's violating the rule is on this line.
#pragma warning restore CA1862

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.