CA2018:Buffer.BlockCopy
的 count
参数应指定要复制的字节数
属性 | 值 |
---|---|
规则 ID | CA2018 |
标题 | Buffer.BlockCopy 的 count 参数应指定要复制的字节数 |
类别 | 可靠性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 8 中默认启用 | 作为警告 |
原因
当对元素大小大于一个字节的数组上 Buffer.BlockCopy
的 count
参数使用 Array.Length
时,将触发此规则。
规则说明
使用 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));
}
}
何时禁止显示警告
禁止显示基于此规则的警告通常是不安全的。