Partilhar via


CA2018: O argumento count para Buffer.BlockCopy deve especificar o número de bytes a copiar

Propriedade 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 causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Como aviso
Línguas aplicáveis C# e Visual Basic

Motivo

Esta regra é acionada quando Array.Length é utilizado como argumento count de Buffer.BlockCopy em matrizes cujos elementos são maiores que um byte.

Descrição da regra

Ao usar Buffer.BlockCopy, o argumento count especifica o número de bytes a copiar. Você só deve usar Array.Length para o count argumento em matrizes cujos elementos são exatamente um byte de tamanho. byte, sbytee 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.

Consulte também