Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
CA2018: Het
| 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.BlockCopygeeft 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, sbyteen 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.