CA2018: Het count
argument om Buffer.BlockCopy
het aantal te kopiëren bytes op te geven
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2018 |
Titel | Het count argument om Buffer.BlockCopy het aantal te kopiëren bytes op te geven |
Categorie | Betrouwbaarheid |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Deze regel wordt geactiveerd wanneer Array.Length
wordt gebruikt voor het count
argument van Buffer.BlockCopy
matrices waarvan de elementen groter zijn dan één byte in grootte.
Beschrijving van regel
Bij gebruik Buffer.BlockCopy
geeft het count
argument het aantal te kopiëren bytes op. U moet alleen Array.Length
gebruiken voor het count
argument voor matrices waarvan de elementen precies één byte groot zijn. byte
, sbyte
en bool
matrices hebben elementen die één byte groot zijn.
Schendingen oplossen
Geef het aantal bytes op dat u wilt kopiëren voor het count
argument.
Opmerking
Schending:
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);
}
}
Oplossing:
Als de elementen van uw matrix groter zijn dan één byte, kunt u de lengte van de matrix vermenigvuldigen met de elementgrootte om het aantal bytes op te halen.
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));
}
}
Wanneer waarschuwingen onderdrukken
Het is over het algemeen NIET veilig om een waarschuwing van deze regel te onderdrukken.