Delen via


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.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.

Zie ook