Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CA2018: Argumen
| 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 10 | 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.