CA2018:要 count
Buffer.BlockCopy
複製的引數應指定要複製的位元組數目
屬性 | 值 |
---|---|
規則識別碼 | CA2018 |
標題 | 要 count 複製的引數 Buffer.BlockCopy 應指定要複製的位元組數目 |
類別 | 可靠性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | 作為警告 |
原因
當 用於 元素大於大小一個位元組之陣列的 引數 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));
}
}
隱藏警告的時機
隱藏此規則的警告通常並不安全。