Bagikan melalui


CA1872: Lebih suka 'Convert.ToHexString' dan 'Convert.ToHexStringLower' daripada rantai panggilan berdasarkan 'BitConverter.ToString'

Nilai
ID Aturan CA1872
Judul Lebih suka 'Convert.ToHexString' dan 'Convert.ToHexStringLower' daripada rantai panggilan berdasarkan 'BitConverter.ToString'
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 9 Sebagai saran

Penyebab

Panggilan untuk BitConverter.ToString diikuti oleh panggilan ke untuk String.Replace menghapus tanda hubung digunakan untuk mengodekan byte ke representasi string heksadesimal. Aturan ini juga diaktifkan jika String.ToLower digunakan dalam rantai panggilan.

Deskripsi aturan

Gunakan Convert.ToHexString atau Convert.ToHexStringLower saat mengodekan byte ke representasi string heksadesimal. Metode ini lebih efisien dan ramah alokasi daripada menggunakan BitConverter.ToString dalam kombinasi dengan String.Replace untuk menghapus tanda hubung dan String.ToLower.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, ganti rantai panggilan dengan Convert.ToHexString atau Convert.ToHexStringLower.

Contoh

Cuplikan kode berikut menunjukkan pelanggaran 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

Cuplikan kode berikut memperbaiki pelanggaran:

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

Kapan harus menekan peringatan

Aman untuk menekan peringatan dari aturan ini; namun, kami sarankan Anda menggunakan atau Convert.ToHexStringConvert.ToHexStringLower.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA1872
// The code that's violating the rule is on this line.
#pragma warning restore CA1872

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1872.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.