值
规则 ID
CA2018
类别
可靠性
修复是中断修复还是非中断修复
非中断
原因
当对元素大小大于一个字节的数组上 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));
}
}
何时禁止显示警告
禁止显示基于此规则的警告通常是不安全的。
另请参阅
可靠性规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。