Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
CA2018: el argumento
| 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 10 | 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.