CA2018:在countBuffer.BlockCopy中的參數應指定複製的位元組數目

屬性
規則識別碼 CA2018
職稱 count 的引數 Buffer.BlockCopy 應指定要複製的位元組數目
類別 可靠性
修正是造成中斷還是不中斷 不中斷
在 .NET 10 中預設啟用 作為警告
適用語言 C# 與 Visual Basic

原因

Array.Length用於Buffer.BlockCopycount參數且數組的元素大小大於一個位元組時,將會觸發此規則。

規則描述

使用 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));
    }
}

隱藏警告的時機

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

另請參閱