CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString'
Value | |
---|---|
Rule ID | CA1872 |
Title | Prefer Convert.ToHexString and Convert.ToHexStringLower over call chains based on BitConverter.ToString |
Category | Performance |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 9 | As suggestion |
Cause
A call to BitConverter.ToString followed by a call to String.Replace to remove dashes is used to encode bytes to a hexadecimal string representation. This rule also fires if String.ToLower is used in the call chain.
Rule description
Use Convert.ToHexString or Convert.ToHexStringLower when encoding bytes to a hexadecimal string representation. These methods are more efficient and allocation-friendly than using BitConverter.ToString in combination with String.Replace to remove dashes and String.ToLower.
How to fix violations
To fix a violation of this rule, replace the call chain with either Convert.ToHexString or Convert.ToHexStringLower.
Example
The following code snippet shows a violation of 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
The following code snippet fixes the violation:
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
When to suppress warnings
It is safe to suppress a warning from this rule; however, we recommend that you use either Convert.ToHexString or Convert.ToHexStringLower.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#pragma warning disable CA1872
// The code that's violating the rule is on this line.
#pragma warning restore CA1872
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA1872.severity = none
For more information, see How to suppress code analysis warnings.