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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.