CA2018: count argomento da specificare Buffer.BlockCopy il numero di byte da copiare

Proprietà valore
ID regola CA2018
Title Argomento count da specificare Buffer.BlockCopy il numero di byte da copiare
Categoria Affidabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come avviso

Causa

Questa regola viene attivata quando Array.Length viene usata per l'argomento count di Buffer.BlockCopy su matrici i cui elementi sono maggiori di un byte di dimensioni.

Descrizione regola

Quando si usa Buffer.BlockCopy, l'argomento count specifica il numero di byte da copiare. È consigliabile usare Array.Length solo per l'argomento count sulle matrici i cui elementi sono esattamente di un byte. byteLe matrici , sbytee bool hanno elementi di dimensioni pari a un byte.

Come correggere le violazioni

Specificare il numero di byte che si intende copiare per l'argomento count .

Esempio

Violazione:

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);
    }
}

Correzione:

Se gli elementi della matrice hanno dimensioni maggiori di un byte, è possibile moltiplicare la lunghezza della matrice in base alle dimensioni dell'elemento per ottenere il numero di byte.

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 eliminare gli avvisi

In genere non è sicuro eliminare un avviso da questa regola.

Vedi anche