Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CA2018: Argument
| 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 10 | 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.