CA2018: el argumento count
para Buffer.BlockCopy
debería especificar el número de bytes que deben copiarse
Propiedad | Value |
---|---|
Identificador de la regla | CA2018 |
Título | El argumento count para Buffer.BlockCopy debe especificar el número de bytes que se copiará |
Categoría | Confiabilidad |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 8 | Como advertencia |
Causa
Esta regla se ejecuta cuando Array.Length
se usa para el argumento count
de Buffer.BlockCopy
en matrices cuyos elementos tienen un tamaño superior a un byte.
Descripción de la regla
Al usar Buffer.BlockCopy
, el argumento count
especifica el número de bytes que deben copiarse. Solo debería usar Array.Length
para el argumento count
en matrices cuyos elementos tendrán exactamente un tamaño de un byte. Las matrices byte
, sbyte
y bool
tienen elementos con un tamaño de un byte.
Cómo corregir infracciones
Especifique el número de bytes que desea copiar para el argumento count
.
Ejemplo
Infracción:
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);
}
}
Corrección:
Si los elementos de la matriz tienen un tamaño superior a un byte, puede multiplicar la longitud de la matriz por el tamaño del elemento para obtener el número de bytes.
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));
}
}
Cuándo suprimir las advertencias
Normalmente, NO es seguro suprimir una advertencia de esta regla.