CA2018: Argument count , který má Buffer.BlockCopy určovat počet bajtů ke zkopírování

Vlastnost Hodnota
ID pravidla CA2018
Název Argument count , který má Buffer.BlockCopy určovat počet bajtů, které se mají zkopírovat
Kategorie Spolehlivost
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako upozornění

Příčina

Toto pravidlo se aktivuje, když Array.Length se použije pro count argument polí Buffer.BlockCopy , jejichž prvky jsou větší než jeden bajt.

Popis pravidla

Při použití Buffer.BlockCopycount argument určuje počet bajtů, které se mají zkopírovat. Pro argumenty byste měli použít Array.Lengthcount pouze pole, jejichž prvky jsou přesně jeden bajt ve velikosti. byte, sbytea bool pole obsahují prvky, které mají velikost jednoho bajtu.

Jak opravit porušení

Zadejte počet bajtů, které chcete zkopírovat pro count argument.

Příklad

Porušení:

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

Oprava:

Pokud jsou prvky pole větší než jeden bajt, můžete délku pole vynásobit velikostí prvku a získat tak počet bajtů.

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

Kdy potlačit upozornění

Obecně není bezpečné potlačit upozornění z tohoto pravidla.

Viz také