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
, sbyte
et 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.