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