共用方式為


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

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

原因

當 用於 元素大於大小一個字節之數位列的 自變數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));
    }
}

隱藏警告的時機

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

另請參閱