CA1872:根據 'BitConverter.ToString' 的呼叫鏈結,偏好使用 'Convert.ToHexString' 和 'Convert.ToHexStringLower'

規則識別碼 CA1872
職稱 偏好使用 'Convert.ToHexString' 和 'Convert.ToHexStringLower' 而不是以 'BitConverter.ToString' 為基礎的呼叫鏈結
類別 效能
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 建議

原因

呼叫 BitConverter.ToString 後面 String.Replace 接著呼叫來移除破折號,可用來將位元組編碼為十六進位字元串表示法。 如果在 String.ToLower 呼叫鏈結中使用,也會引發此規則。

檔案描述

將位元組編碼為十六進位字串表示法時,請使用 Convert.ToHexStringConvert.ToHexStringLower 。 這些方法比搭配 使用 BitConverter.ToStringString.Replace 來移除破折號 和 String.ToLower更有效率且配置易用。

如何修正違規

若要修正此規則的違規,請將呼叫鏈結取代為 Convert.ToHexStringConvert.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.ToHexStringConvert.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

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告