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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk