CA2018: Argumentet count
som ska Buffer.BlockCopy
anges ska ange hur många byte som ska kopieras
Property | Värde |
---|---|
Regel-ID | CA2018 |
Title | Argumentet count som Buffer.BlockCopy ska anges ska ange hur många byte som ska kopieras |
Kategori | Tillförlitlighet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Den här regeln utlöses när Array.Length
används för argumentet Buffer.BlockCopy
för count
på matriser vars element är större än en byte i storlek.
Regelbeskrivning
När du använder Buffer.BlockCopy
count
anger argumentet antalet byte som ska kopieras. Du bör bara använda Array.Length
för count
argumentet på matriser vars element är exakt en byte i storlek. byte
, sbyte
, och bool
matriser har element som är en byte i storlek.
Så här åtgärdar du överträdelser
Ange antalet byte som du tänker kopiera för count
argumentet.
Exempel
Överträdelse:
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);
}
}
Lösningen
Om matrisens element är större än en byte i storlek kan du multiplicera matrisens längd med elementstorleken för att få antalet 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));
}
}
När du ska ignorera varningar
Det är vanligtvis INTE säkert att ignorera en varning från den här regeln.