Bagikan melalui


CA2018: Argumen count untuk Buffer.BlockCopy menentukan jumlah byte yang akan disalin

Properti Nilai
ID Aturan CA2018
Judul Argumen count untuk Buffer.BlockCopy menentukan jumlah byte yang akan disalin
Golongan Keandalan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai peringatan

Penyebab

Aturan ini diaktifkan ketika Array.Length digunakan untuk count argumen Buffer.BlockCopy pada array yang elemennya lebih besar dari satu byte dalam ukuran.

Deskripsi aturan

Saat menggunakan Buffer.BlockCopy, argumen count menentukan jumlah byte yang akan disalin. Anda hanya boleh menggunakan Array.Length untuk argumen count pada larik yang elemennya berukuran tepat satu byte. Larik byte, sbyte, dan bool memiliki elemen berukuran satu byte.

Cara memperbaiki pelanggaran

Tentukan jumlah byte yang ingin Anda salin untuk count argumen.

Contoh

Pelanggaran:

using System;
class Program
{
    static void Main()
    {
        int[] src = new int[] {1, 2, 3, 4};
        int[] dst = new int[] {0, 0, 0, 0};

        Buffer.BlockCopy(src, 0, dst, 0, src.Length);
    }
}

Perbaikan:

Jika elemen array Anda berukuran lebih besar dari satu byte, Anda dapat mengalikan panjang array dengan ukuran elemen untuk mendapatkan jumlah byte.

using System;
class Program
{
    static void Main()
    {
        int[] src = new int[] {1, 2, 3, 4};
        int[] dst = new int[] {0, 0, 0, 0};

        Buffer.BlockCopy(src, 0, dst, 0, src.Length * sizeof(int));
    }
}

Kapan harus menekan peringatan

Umumnya TIDAK aman untuk menekan peringatan dari aturan ini.

Baca juga