CA2018:Buffer.BlockCopycount 参数应指定要复制的字节数

属性
规则 ID CA2018
标题 Buffer.BlockCopycount 参数应指定要复制的字节数
类别 可靠性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用 作为警告

原因

当对元素大小大于一个字节的数组上 Buffer.BlockCopycount 参数使用 Array.Length 时,将触发此规则。

规则说明

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

何时禁止显示警告

禁止显示基于此规则的警告通常是不安全的。

另请参阅