CA2018:要
| 屬性 | 值 |
|---|---|
| 規則識別碼 | CA2018 |
| 職稱 |
count 的引數 Buffer.BlockCopy 應指定要複製的位元組數目 |
| 類別 | 可靠性 |
| 修正程式是中斷或非中斷 | 不中斷 |
| 在 .NET 10 中預設啟用 | 作為警告 |
原因
當 用於 元素大於大小一個字節之數位列的 自變數Array.Length時count,就會引發Buffer.BlockCopy此規則。
檔案描述
使用 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));
}
}
隱藏警告的時機
隱藏此規則的警告通常並不安全。