Поделиться через


CA1872: предпочитайте "Convert.ToHexString" и "Convert.ToHexStringLower" по цепочкам вызовов на основе BitConverter.ToString.

Значение
Идентификатор правила CA1872
Заголовок Предпочитать и Convert.ToHexStringLower переопределить Convert.ToHexString цепочки вызовов на основеBitConverter.ToString
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 9 Как предложение

Причина

Вызов, за String.Replace которым следует вызов BitConverter.ToString для удаления дефисов, используется для кодирования байтов в шестнадцатеричное строковое представление. Это правило также возникает, если String.ToLower используется в цепочке вызовов.

Описание правила

Используйте Convert.ToHexString или Convert.ToHexStringLower когда кодирование байтов в шестнадцатеричное строковое представление. Эти методы более эффективны и удобны для выделения, чем используются BitConverter.ToString в сочетании с String.Replace удалением дефисов и String.ToLower.

Устранение нарушений

Чтобы устранить нарушение этого правила, замените цепочку вызовов либо Convert.ToHexString Convert.ToHexStringLower.

Пример

В следующем фрагменте кода показано нарушение 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

Следующий фрагмент кода исправляет нарушение.

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

Когда лучше отключить предупреждения

Это безопасно для подавления предупреждения из этого правила; однако рекомендуется использовать либоConvert.ToHexString.Convert.ToHexStringLower

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.