Share via


CA1862: Gebruik de methode 'StringComparison' overbelastingen om hoofdlettergevoelige tekenreeksvergelijkingen uit te voeren

Eigenschappen Weergegeven als
Regel-id CA1862
Titel Gebruik de methode 'StringComparison' overbelastingen om hoofdlettergevoelige tekenreeksvergelijkingen uit te voeren
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Code vergelijkt twee tekenreeksen op een niet-hoofdlettergevoelige manier door eerst een of beide tekenreeksen aan te roepenToLower(), ToLowerInvariant()ToUpper()of ToUpperInvariant() beide tekenreeksen.

Beschrijving van regel

Wanneer codeaanroepen ToLower(), ToLowerInvariant(), ToUpper()of ToUpperInvariant(), een toewijzing wordt uitgevoerd. Als de enige reden voor het aanroepen van deze methoden is om een niet-hoofdlettergevoelige tekenreeksvergelijking of zoekopdracht uit te voeren, is de toewijzing niet nodig. In plaats daarvan kunt u een vergelijkingsmethode voor tekenreeksen aanroepen die een StringComparison van de waarden accepteert en een van de *IgnoreCase waarden opgeeft.

Schendingen oplossen

Verwijder de aanroep naar ToLower(), ToLowerInvariant()of ToUpper(), of ToUpperInvariant()roep een van de StringComparer methoden aan, of een van de volgende methoden die een StringComparison argument gebruiken:

Notitie

  • Als u de code wijzigt om een overbelasting te gebruiken die een StringComparison argument gebruikt, kan dit subtiele wijzigingen in gedrag veroorzaken. Het is belangrijk om grondig te testen als u deze wijziging aanbrengt of de visual Studio-gloeilampsuggesties accepteert.
  • Als de tekenreeksen niet op een cultureel gevoelige manier hoeven te worden vergeleken, kunt u overwegen om door te geven StringComparison.OrdinalIgnoreCase.

Opmerking

In het volgende voorbeeld ziet u een schending van de 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())

In het volgende voorbeeld ziet u code waarmee de schending wordt opgelost:

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)

Wanneer waarschuwingen onderdrukken

Het is veilig om waarschuwingen van deze regel te onderdrukken als de prestaties geen probleem zijn.

Als u Entity Framework Core (EF Core) gebruikt, moet u deze regel onderdrukken voor scenario's waarin u een query op een database uitvoert door een tekenreeks te vergelijken. EF Core genereert een uitzondering als u een methode zoals String.Equals(String, StringComparison) die een StringComparison argument gebruikt, omdat dergelijke query's niet worden vertaald naar SQL. Zie Vertaling van ingebouwde .NET-tekenreeksbewerkingen voor meer informatie.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.