CA1872: Prefira 'Convert.ToHexString' e 'Convert.ToHexStringLower' em vez de cadeias de chamadas baseadas em 'BitConverter.ToString'
Value | |
---|---|
ID da regra | CA1872 |
Título | Prefira Convert.ToHexString e Convert.ToHexStringLower sobreponha cadeias de chamadas com base em BitConverter.ToString |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Como sugestão |
Motivo
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. Esta 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 fáceis de alocação 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 desta regra, substitua a cadeia de chamadas por um Convert.ToHexString ou Convert.ToHexStringLower.
Exemplo
O trecho de código a seguir 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 trecho de código a seguir corrige 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 uma advertência desta regra; no entanto, recomendamos que você use um ou Convert.ToHexString Convert.ToHexStringLower.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1872.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.