CA1872: Föredrar "Convert.ToHexString" och "Convert.ToHexStringLower" framför anropskedjor baserade på "BitConverter.ToString"
Värde | |
---|---|
Regel-ID | CA1872 |
Title | Föredrar Convert.ToHexString och Convert.ToHexStringLower över samtalskedjor baserat på BitConverter.ToString |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Ett anrop till BitConverter.ToString följt av ett anrop till för att String.Replace ta bort bindestreck används för att koda byte till en hexadecimal strängrepresentation. Den här regeln utlöses också om String.ToLower den används i anropskedjan.
Regelbeskrivning
Använd Convert.ToHexString eller Convert.ToHexStringLower när du kodar byte till en hexadecimal strängrepresentation. Dessa metoder är effektivare och allokeringsvänligare än att använda BitConverter.ToString i kombination med String.Replace för att ta bort bindestreck och String.ToLower.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln ersätter du anropskedjan med antingen Convert.ToHexString eller Convert.ToHexStringLower.
Exempel
Följande kodfragment visar ett brott mot 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
Följande kodfragment åtgärdar överträdelsen:
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
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln. Vi rekommenderar dock att du använder antingen Convert.ToHexString eller Convert.ToHexStringLower.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1872
// The code that's violating the rule is on this line.
#pragma warning restore CA1872
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1872.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.