CA1862 : Utilisez les surcharges de méthode « StringComparison » pour effectuer des comparaisons de chaînes qui ne respectent pas la casse

Propriété Value
Identificateur de la règle CA1862
Titre Utilisez les surcharges de méthode « StringComparison » pour effectuer des comparaisons de chaînes qui ne respectent pas la casse
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Le code compare deux chaînes de manière non sensible à la casse en appelant d’abord ToLower(), ToLowerInvariant(), ToUpper() ou ToUpperInvariant()sur une des chaînes ou les deux.

Description de la règle

Lorsque le code appelle ToLower(), ToLowerInvariant(), ToUpper(), ou ToUpperInvariant(), une allocation est effectuée. Si la seule raison d’appeler ces méthodes est d’effectuer une comparaison de chaînes ou une recherche sans respect de la casse, l’allocation n’est pas nécessaire. À la place, vous pouvez appeler une méthode de comparaison de chaînes qui prend un StringComparison et spécifie l’une des valeurs *IgnoreCase.

Comment corriger les violations

Supprimez l’appel à ToLower(), ToLowerInvariant(), ToUpper() ou ToUpperInvariant() et appelez l’une des méthodes StringComparer, ou l’une des méthodes suivantes qui accepte un argument StringComparison :

Remarque

  • Si vous modifiez votre code pour utiliser une surcharge qui prend un argument StringComparison, cela peut entraîner des modifications subtiles du comportement. Il est important d’effectuer des tests approfondis si vous apportez cette modification ou acceptez la suggestion de l’ampoule Visual Studio.
  • Si les chaînes n’ont pas besoin d’être comparées d’une manière culturellement sensible, envisagez de passer StringComparison.OrdinalIgnoreCase.

Exemple

L’exemple suivant montre une violation de la règle :

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

L’exemple suivant montre le code qui corrige la violation :

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)

Quand supprimer les avertissements

Vous pouvez sans risque supprimer des avertissements de cette règle si les performances ne constituent pas un problème.

Si vous utilisez Entity Framework Core (EF Core), vous devez supprimer cette règle pour les scénarios où vous interrogez une base de données en comparant une chaîne. EF Core lève une exception si vous utilisez une méthode telle que String.Equals(String, StringComparison) qui prend un argument StringComparison, car elle ne traduit pas ces requêtes en SQL. Pour plus d’informations, consultez Traduction des opérations de chaîne .NET intégrées.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.