Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
CA2018: o argumento
| Property | Valor |
|---|---|
| ID da regra | CA2018 |
| Título | O argumento count para Buffer.BlockCopy deve especificar o número de bytes a serem copiados |
| Categoria | Confiabilidade |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Como aviso |
Causa
Esta regra é disparada quando Array.Length é usado para o argumento count de Buffer.BlockCopy em matrizes com elementos que têm tamanhos maiores que um byte.
Descrição da regra
Ao usar Buffer.BlockCopy, o argumento count especifica o número de bytes a serem copiados. Você só deve usar Array.Length para o argumento count em matrizes com elementos que têm exatamente um byte de tamanho. As matrizes byte, sbyte e bool têm elementos com o tamanho de um byte.
Como corrigir violações
Especifique o número de bytes que você pretende copiar para o argumento count.
Exemplo
Violação:
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);
}
}
Correção:
Se os elementos da matriz tiverem um tamanho maior que um byte, será possível multiplicar o comprimento da matriz pelo tamanho do elemento a fim de obter o número de bytes.
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));
}
}
Quando suprimir avisos
Geralmente, NÃO é seguro suprimir um aviso dessa regra.