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.BlockCopy
count
argument určuje počet bajtů, které se mají zkopírovat. Pro argumenty byste měli použít Array.Length
count
pouze pole, jejichž prvky jsou přesně jeden bajt ve velikosti. byte
, sbyte
a 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.