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ý Buffer.BlockCopy specifikuje počet bajtů ke zkopírování |
| Kategorie | Spolehlivost |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Toto pravidlo se spustí, když Array.Length je použit jako argument count u 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. Měli byste použít Array.Length pro argument count pouze u polí, jejichž prvky mají velikost přesně jednoho bajtu.
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.