Share via


CA1872: Föredrar "Convert.ToHexString" och "Convert.ToHexStringLower" framför anropskedjor baserade på "BitConverter.ToString"

Värde
Regel-ID CA1872
Title Föredra "Convert.ToHexString" och "Convert.ToHexStringLower" framför anropskedjor baserade på "BitConverter.ToString"
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 9 Som förslag

Orsak

Ett anrop till BitConverter.ToString följt av ett anrop till för att String.Replace ta bort bindestreck används för att koda byte till en hexadecimal strängrepresentation. Den här regeln utlöses också om String.ToLower den används i anropskedjan.

Regelbeskrivning

Använd Convert.ToHexString eller Convert.ToHexStringLower när du kodar byte till en hexadecimal strängrepresentation. Dessa metoder är effektivare och allokeringsvänligare än att använda BitConverter.ToString i kombination med String.Replace för att ta bort bindestreck och String.ToLower.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln ersätter du anropskedjan med antingen Convert.ToHexString eller Convert.ToHexStringLower.

Exempel

Följande kodfragment visar ett brott mot 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

Följande kodfragment åtgärdar överträdelsen:

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

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln. Vi rekommenderar dock att du använder antingen Convert.ToHexString eller Convert.ToHexStringLower.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.