CA1872: Preferuj metodę "Convert.ToHexString" i "Convert.ToHexStringLower" za pośrednictwem łańcuchów wywołań opartych na metodzie "BitConverter.ToString"

Wartość
Identyfikator reguły CA1872
Tytuł Preferuj metodę "Convert.ToHexString" i "Convert.ToHexStringLower" za pośrednictwem łańcuchów wywołań opartych na metodzie "BitConverter.ToString"
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Wywołanie elementu , po BitConverter.ToString którym następuje wywołanie w celu String.Replace usunięcia kreski, służy do kodowania bajtów na reprezentację ciągu szesnastkowego. Ta reguła jest również uruchamiana, jeśli String.ToLower jest używana w łańcuchu wywołań.

Opis reguły

Użyj Convert.ToHexString lub Convert.ToHexStringLower podczas kodowania bajtów do reprezentacji ciągu szesnastkowego. Te metody są bardziej wydajne i przyjazne alokacji niż w BitConverter.ToString połączeniu z String.Replace w celu usunięcia kreski i String.ToLower.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zastąp łańcuch wywołań ciągiem Convert.ToHexString lub Convert.ToHexStringLower.

Przykład

Poniższy fragment kodu przedstawia naruszenie 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

Poniższy fragment kodu naprawia naruszenie:

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły; zalecamy jednak użycie polecenia Convert.ToHexString lub Convert.ToHexStringLower.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.