CA2018 : l’argument count à Buffer.BlockCopy doit spécifier le nombre d’octets à copier

Propriété Value
Identificateur de la règle CA2018
Titre L’argument count vers Buffer.BlockCopy doit spécifier le nombre d’octets à copier
Catégorie Fiabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre d’avertissement

Cause

Cette règle se déclenche lorsque Array.Length est utilisée pour l’argument count de Buffer.BlockCopy sur des tableaux dont les éléments ont une taille supérieure à un octet.

Description de la règle

Lors de l’utilisation de Buffer.BlockCopy, l’argument count spécifie le nombre d’octets à copier. Vous devez uniquement utiliser Array.Length pour l’argument count sur les tableaux dont les éléments sont exactement un octet de taille. Les tableaux byte, sbyteet bool ont des éléments d’une taille d’un octet.

Comment corriger les violations

Spécifiez le nombre d’octets que vous envisagez de copier pour l’argument count.

Exemple

Violation :

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

Correctif :

Si les éléments de votre tableau sont supérieurs à un octet, vous pouvez multiplier la longueur du tableau par la taille de l’élément pour obtenir le nombre d’octets.

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

Quand supprimer les avertissements

Il n’est généralement PAS sûr de supprimer un avertissement de cette règle.

Voir aussi