CA1872: 偏好 'Convert.ToHexString' 和 'Convert.ToHexStringLower',而不是以 'BitConverter.ToString' 為基礎的呼叫鏈
值 | |
---|---|
規則識別碼 | CA1872 |
職稱 | 根據偏好 Convert.ToHexString 和 Convert.ToHexStringLower 而不是呼叫鏈結 BitConverter.ToString |
類別 | 效能 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 建議 |
原因
呼叫 BitConverter.ToString 後面 String.Replace 接著呼叫來移除破折號,可用來將位元組編碼為十六進位字元串表示法。 如果在 String.ToLower 呼叫鏈結中使用,也會引發此規則。
檔案描述
將位元組編碼為十六進位字串表示法時,請使用 Convert.ToHexString 或 Convert.ToHexStringLower 。 這些方法比搭配 使用 BitConverter.ToString String.Replace 來移除破折號 和 String.ToLower更有效率且配置易用。
如何修正違規
若要修正此規則的違規,請將呼叫鏈結取代為 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
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。