Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
CA2018: Argumentet
| 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 count för Buffer.BlockCopy på matriser vars element är större än en byte i storlek.
Regelbeskrivning
När du använder Buffer.BlockCopycount 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.