CA2018: O count
argumento para Buffer.BlockCopy
deve especificar o número de bytes a serem copiados
Property | valor |
---|---|
ID da regra | CA2018 |
Título | O count argumento para Buffer.BlockCopy deve especificar o número de bytes a serem copiados |
Categoria | Fiabilidade |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como aviso |
Motivo
Esta regra é acionada quando Array.Length
é usada para o count
argumento de matrizes cujos elementos são maiores que um byte de Buffer.BlockCopy
tamanho.
Descrição da regra
Ao usar Buffer.BlockCopy
o , o argumento especifica o count
número de bytes a serem copiados. Você só deve usar Array.Length
para o count
argumento em matrizes cujos elementos têm exatamente um byte de tamanho. byte
, sbyte
e bool
as matrizes têm elementos com um byte de tamanho.
Como corrigir violações
Especifique o número de bytes que você pretende copiar para o count
argumento.
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 mais de um byte, você poderá multiplicar o comprimento da matriz pelo tamanho do elemento para 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 desta regra.