Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
CA2018 : l’argument
| 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 10 | Comme 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.