Delen via


CA2018: Het count argument aan Buffer.BlockCopy moet het aantal bytes opgeven dat gekopieerd moet worden.

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.

Zie ook