Megosztás a következőn keresztül:


CA1862: A "StringComparison" metódus túlterhelésének használata a kis- és nagybetűk megkülönböztetésére vonatkozó sztringek összehasonlításához

Tulajdonság Érték
Szabályazonosító CA1862
Cím A "StringComparison" metódus túlterhelése a kis- és nagybetűk érzéketlen sztring-összehasonlításának végrehajtásához
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A Kód két sztringet hasonlít össze kis- és nagybetűk szempontjából érzéketlen módon az első hívássalToLower(), ToLowerInvariant()ToUpper()vagy ToUpperInvariant() egy vagy mindkét sztringgel.

Szabály leírása

Kódhívások ToLower()ToLowerInvariant(), vagy ToUpper()ToUpperInvariant()foglalások végrehajtásakor. Ha a metódusok meghívásának egyetlen oka a kis- és nagybetűk közötti érzéketlen sztringek összehasonlítása vagy keresése, a foglalás szükségtelen. Ehelyett meghívhat egy sztring-összehasonlító metódust, amely egy értéket vesz igénybe StringComparison , és megadja az *IgnoreCase egyik értéket.

Szabálysértések kijavítása

Távolítsa el a , ToLower()ToLowerInvariant()ToUpper()vagy ToUpperInvariant(), hívását, és hívja meg valamelyik StringComparer metódust, vagy az alábbi metódusok egyikét, amely argumentumot StringComparison vesz fel:

Feljegyzés

  • Ha úgy módosítja a kódot, hogy egy argumentumot StringComparison igénylő túlterhelést használjon, az apró módosításokat okozhat a viselkedésben. Ha ezt a módosítást végrehajtja, vagy elfogadja a Visual Studio villanykörte javaslatát, fontos alapos tesztelést végeznie.
  • Ha a sztringeket nem kell kulturálisan érzékeny módon összehasonlítani, fontolja meg a továbbítást StringComparison.OrdinalIgnoreCase.

Példa

Az alábbi példa a szabály megsértését mutatja be:

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())

Az alábbi példa a szabálysértést kijavító kódot mutatja be:

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)

Mikor kell letiltani a figyelmeztetéseket?

Ha a teljesítmény nem okoz problémát, nyugodtan el lehet tiltani a szabály figyelmeztetéseit.

Az Entity Framework Core (EF Core) használata esetén sztring összehasonlításával tiltsa le ezt a szabályt olyan forgatókönyvek esetében, ahol egy adatbázist kérdez le. Az EF Core kivételt jelent, ha olyan metódust használ, amely String.Equals(String, StringComparison) argumentumot StringComparison vesz igénybe, mivel az nem fordítja le az ilyen lekérdezéseket AZ SQL-be. További információ: A beépített .NET-sztringműveletek fordítása.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.