CA1872: 'BitConverter.ToString' に基づく呼び出しチェーンよりも、'Convert.ToHexString' と 'Convert.ToHexStringLower' を優先する
値 | |
---|---|
ルール ID | CA1872 |
Title | 呼び出しチェーンよりも Convert.ToHexString と Convert.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
詳細については、「コード分析の警告を抑制する方法」を参照してください。
.NET