Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
CA2018:
| 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 10 | 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.