CA1862: Gebruik de overbelastingen van de methode 'StringComparison' voor het uitvoeren van hoofdletterongevoelige tekenreeksvergelijkingen.

Eigenschap Waarde
Regel-id CA1862
Titel Gebruik de methode 'StringComparison' overbelastingen om hoofdletterongevoelige tekenreeksvergelijkingen uit te voeren
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

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

Beschrijving van regel

Wanneer code ToLower(), ToLowerInvariant(), ToUpper(), of ToUpperInvariant() aanroept, wordt een toewijzing 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 als parameter accepteert en een van de *IgnoreCase waarden opgeeft.

Hoe schendingen op te lossen

Verwijder de aanroep naar ToLower(), ToLowerInvariant(), ToUpper(), of ToUpperInvariant(), of 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 StringComparison.OrdinalIgnoreCase te gebruiken.

Voorbeeld

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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.