CA1872 : Préférer « Convert.ToHexString » et « Convert.ToHexStringLower » sur les chaînes d’appels basées sur « BitConverter.ToString »

active
Identificateur de la règle CA1872
Titre Préférer « Convert.ToHexString » et « Convert.ToHexStringLower » sur les chaînes d’appels basées sur « BitConverter.ToString »
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activée par défaut dans .NET 9 À titre de suggestion

Cause

Un appel à BitConverter.ToString suivre par un appel pour String.Replace supprimer des tirets est utilisé pour encoder des octets dans une représentation sous forme de chaîne hexadécimale. Cette règle se déclenche également si String.ToLower elle est utilisée dans la chaîne d’appels.

Description de la règle

Utilisez Convert.ToHexString ou Convert.ToHexStringLower lors de l’encodage d’octets dans une représentation sous forme de chaîne hexadécimale. Ces méthodes sont plus efficaces et plus conviviales que d’utiliser BitConverter.ToString en combinaison avec pour String.Replace supprimer des tirets et String.ToLower.

Comment corriger les violations

Pour corriger une violation de cette règle, remplacez la chaîne d’appels par l’une ou l’autre Convert.ToHexString .Convert.ToHexStringLower

Exemple

L’extrait de code suivant montre une violation de CA1872 :

using System;
using System.Text;

class HelloWorldEncoder
{
    private readonly byte[] _data = Encoding.ASCII.GetBytes("Hello World");

    public string Encode()
    {
        return BitConverter.ToString(_data).Replace("-", "");
    }

    public string EncodeToLower()
    {
        return BitConverter.ToString(_data).Replace("-", "").ToLower();
    }
}
Imports System
Imports System.Text

Class HelloWorldEncoder
    Private ReadOnly _data As Byte() = Encoding.ASCII.GetBytes("Hello World")

    Public Function Encode() As String
        Return BitConverter.ToString(_data).Replace("-", "")
    End Function

    Public Function EncodeToLower() As String
        Return BitConverter.ToString(_data).Replace("-", "").ToLower()
    End Function
End Class

L’extrait de code suivant corrige la violation :

using System;
using System.Text;

class HelloWorldEncoder
{
    private readonly byte[] _data = Encoding.ASCII.GetBytes("Hello World");

    public string Encode()
    {
        return Convert.ToHexString(data);
    }

    public string EncodeToLower()
    {
        return Convert.ToHexStringLower(data);
    }
}
Imports System
Imports System.Text

Class HelloWorldEncoder
    Private ReadOnly _data As Byte() = Encoding.ASCII.GetBytes("Hello World")

    Public Function Encode() As String
        Return Convert.ToHexString(data)
    End Function

    Public Function EncodeToLower() As String
        Return Convert.ToHexStringLower(data)
    End Function
End Class

Quand supprimer les avertissements

Il est sûr de supprimer un avertissement de cette règle ; toutefois, nous vous recommandons d’utiliser l’une ou Convert.ToHexStringLowerl’autre Convert.ToHexString .

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 CA1872
// The code that's violating the rule is on this line.
#pragma warning restore CA1872

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.CA1872.severity = none

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