次の方法で共有


CA1872: 'BitConverter.ToString' に基づく呼び出しチェーンよりも、'Convert.ToHexString' と 'Convert.ToHexStringLower' を優先する

ルール ID CA1872
Title 呼び出しチェーンよりも Convert.ToHexStringConvert.ToHexStringLower を優先する BitConverter.ToString
カテゴリ パフォーマンス
修正が中断ありか中断なしか なし
.NET 9 では既定で有効 提案として

原因

BitConverter.ToStringへの呼び出しの後にダッシュを削除するString.Replaceの呼び出しを使用して、バイトを 16 進数の文字列表現にエンコードします。 このルールは、呼び出しチェーンで String.ToLower が使用されている場合にも発生します。

規則の説明

バイトを 16 進文字列表現にエンコードする場合は、 Convert.ToHexString または Convert.ToHexStringLower を使用します。 これらのメソッドは、ダッシュとString.ToLowerを削除するString.Replaceと組み合わせてBitConverter.ToStringを使用するよりも効率的で割り当てに優れています。

違反の修正方法

この規則違反を修正するには、呼び出しチェーンを 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

詳細については、「コード分析の警告を抑制する方法」を参照してください。