Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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.
- 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, ž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.