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 9 | 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:
- String.Compare(String, String, StringComparison)
- String.Contains(String, StringComparison)
- String.EndsWith(String, StringComparison)
- String.Equals(String, StringComparison)
- String.IndexOf
- String.LastIndexOf
- String.Replace(String, String, StringComparison)
- String.StartsWith(String, StringComparison)
- Compare(Uri, Uri, UriComponents, UriFormat, StringComparison)
- StringSegment.Compare(StringSegment, StringSegment, StringComparison)
- StringSegment.EndsWith(String, StringComparison)
- StringSegment.Equals
- StringSegment.StartsWith(String, StringComparison)
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.