Share via


CA1872: Prefer 'Convert.ToHexString' en 'Convert.ToHexStringLower' over oproepketens op basis van 'BitConverter.ToString'

Weergegeven als
Regel-id CA1872
Titel Geef de voorkeur aan 'Convert.ToHexString' en 'Convert.ToHexStringLower' via oproepketens op basis van BitConverter.ToString
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

Oorzaak

Een aanroep die BitConverter.ToString wordt gevolgd door een aanroep om streepjes te String.Replace verwijderen, wordt gebruikt om bytes te coderen naar een hexadecimale tekenreeksweergave. Deze regel wordt ook geactiveerd als String.ToLower deze wordt gebruikt in de aanroepketen.

Beschrijving van regel

Gebruik Convert.ToHexString of Convert.ToHexStringLower bij het coderen van bytes aan een hexadecimale tekenreeksweergave. Deze methoden zijn efficiënter en toewijzingsvriendelijk dan het gebruik BitConverter.ToString in combinatie met String.Replace het verwijderen van streepjes en String.ToLower.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, vervangt u de aanroepketen door Convert.ToHexString of Convert.ToHexStringLower.

Opmerking

Het volgende codefragment toont een schending van 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

Met het volgende codefragment wordt de schending opgelost:

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

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken; het is echter raadzaam dat u een Convert.ToHexString van beide of Convert.ToHexStringLower.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.