CA2018:在
| 屬性 | 值 |
|---|---|
| 規則識別碼 | CA2018 |
| 職稱 |
count 的引數 Buffer.BlockCopy 應指定要複製的位元組數目 |
| 類別 | 可靠性 |
| 修正是造成中斷還是不中斷 | 不中斷 |
| 在 .NET 10 中預設啟用 | 作為警告 |
| 適用語言 | C# 與 Visual Basic |
原因
當Array.Length用於Buffer.BlockCopy的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));
}
}
隱藏警告的時機
隱藏此規則的警告通常並不安全。