Compartilhar via


CA1872: Prefira 'Convert.ToHexString' e 'Convert.ToHexStringLower' em cadeias de chamadas baseadas em 'BitConverter.ToString'

Valor
ID da regra CA1872
Título Prefira 'Convert.ToHexString' e 'Convert.ToHexStringLower' em vez de cadeias de chamadas baseadas em 'BitConverter.ToString'
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 9 Como sugestão

Causa

Uma chamada para BitConverter.ToString seguida por uma chamada para String.Replace remover traços é usada para codificar bytes para uma representação de cadeia de caracteres hexadecimal. Essa regra também é acionada se String.ToLower for usada na cadeia de chamadas.

Descrição da regra

Use Convert.ToHexString ou Convert.ToHexStringLower ao codificar bytes para uma representação de cadeia de caracteres hexadecimal. Esses métodos são mais eficientes e alocáveis do que usar BitConverter.ToString em combinação com String.Replace para remover traços e String.ToLower.

Como corrigir violações

Para corrigir uma violação dessa regra, substitua a cadeia de chamadas por ou Convert.ToHexStringConvert.ToHexStringLower.

Exemplo

O seguinte trecho de código mostra uma violação 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

O seguinte snippet de código conserta a violação:

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

Quando suprimir avisos

É seguro suprimir um aviso desta regra; no entanto, recomendamos que você use um Convert.ToHexString ou Convert.ToHexStringLower.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.