CA2018: A count argumentumnak meg kell határoznia a másolandó Buffer.BlockCopy bájtok számát.

Tulajdonság Érték
Szabályazonosító CA2018
Cím A count argumentumnak az Buffer.BlockCopy másolandó bájtok számát kell megadnia
Kategória Megbízhatóság
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Figyelmeztetésként
Alkalmazandó nyelvek C# és Visual Basic

Ok

Ez a szabály akkor aktiválódik, amikor a Array.Length-t a Buffer.BlockCopycount argumentumaként használják olyan tömbökben, amelyek elemei egy bájtnál nagyobb méretűek.

Szabály leírása

Buffer.BlockCopy használata esetén az count argumentum határozza meg a másolandó bájtok számát. Csak olyan Array.Length tömbök argumentumához használhatócount, amelyek elemei pontosan egy bájt méretűek. byte, sbyteés bool a tömbök egy bájt méretű elemeket tartalmaznak.

Szabálysértések kijavítása

Adja meg, hogy hány bájtot szeretne másolni az count argumentumhoz.

Példa

Szabálysértés:

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);
    }
}

Javítás:

Ha a tömb elemei egy bájtnál nagyobbak, megszorozhatja a tömb hosszát az elem méretével a bájtok számának lekéréséhez.

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));
    }
}

Mikor kell letiltani a figyelmeztetéseket?

Általában NEM biztonságos a szabály figyelmeztetésének mellőzése.

Lásd még