CA2018: count
argomento da specificare Buffer.BlockCopy
il numero di byte da copiare
Proprietà | valore |
---|---|
ID regola | CA2018 |
Title | L'argomento count di Buffer.BlockCopy dovrebbe specificare il numero di byte da copiare |
Categoria | Affidabilità |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | 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.
byte
Le matrici , sbyte
e 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.