CA2018:要count
Buffer.BlockCopy
複製的自變數應指定要複製的位元元組數目
屬性 | 值 |
---|---|
規則識別碼 | CA2018 |
職稱 | Buffer.BlockCopy 的引數 count 應指定要複製的位元組數目 |
類別 | 可靠性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 作為警告 |
原因
當 用於 元素大於大小一個字節之數位列的 自變數Buffer.BlockCopy
時Array.Length
,就會引發count
此規則。
檔案描述
使用 Buffer.BlockCopy
時,count
引數會指定要複製的位元組數目。 您應只在元素的大小剛好是一個位元組的陣列上將 Array.Length
用於該 count
引數。 byte
、sbyte
和 bool
陣列具有大小為一個位元組的元素。
如何修正違規
指定您要針對 count
自變數複製的位元元組數目。
範例
違規:
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);
}
}
修正:
如果陣列的元素大小大於一個字節,您可以將陣列的長度乘以元素大小,以取得位元組數目。
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));
}
}
隱藏警告的時機
隱藏此規則的警告通常並不安全。