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, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Kód porovnává dva řetězce, nerozlišující malá a velká písmena, tím, že nejdříve volá ToLower(), ToLowerInvariant(), ToUpper() nebo ToUpperInvariant() na jeden nebo oba řetězce.

Popis pravidla

Při volání ToLower(), ToLowerInvariant(), ToUpper() nebo ToUpperInvariant() je provedeno přidělení. 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 zavolejte buď jednu z metod StringComparer, nebo jednu z následujících metod, která má argument typu StringComparison.

Poznámka:

  • Pokud změníte kód tak, že použijete overload, který přijímá StringComparison argument, může to způsobit drobné změny v 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í důležitý, 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 je String.Equals(String, StringComparison), která přijímá argument StringComparison, protože takové dotazy nepřeloží 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.