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 9 | 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:
- 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)
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.