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 Convert.ToHexString łańcuchy połączeń i Convert.ToHexStringLower na ich podstawie 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.