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
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2018 |
| Titel | Het count argument bij Buffer.BlockCopy moet het aantal bytes op te geven dat gekopieerd moet worden. |
| Categorie | Betrouwbaarheid |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als waarschuwing |
| Toepasselijke talen | C# en Visual Basic |
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.
Hoe schendingen op te lossen
Geef het aantal bytes op dat u wilt kopiëren voor het count argument.
Voorbeeld
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);
}
}
Herstel:
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.