CA2018:要 countBuffer.BlockCopy 複製的引數應指定要複製的位元組數目

屬性
規則識別碼 CA2018
標題 count 複製的引數 Buffer.BlockCopy 應指定要複製的位元組數目
類別 可靠性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 作為警告

原因

當 用於 元素大於大小一個位元組之陣列的 引數 Buffer.BlockCopyArray.Length ,就會引發 count 此規則。

檔案描述

使用 Buffer.BlockCopy 時,count 引數會指定要複製的位元組數目。 您應只在元素的大小剛好是一個位元組的陣列上將 Array.Length 用於該 count 引數。 bytesbytebool 陣列具有大小為一個位元組的元素。

如何修正違規

指定您想要針對 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));
    }
}

隱藏警告的時機

隱藏此規則的警告通常並不安全。

另請參閱