CA2018: count
Argument, który Buffer.BlockCopy
ma określać liczbę bajtów do skopiowania
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2018 |
Tytuł | count Argument , który Buffer.BlockCopy ma określać liczbę bajtów do skopiowania |
Kategoria | Niezawodność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Ta reguła jest uruchamiana, gdy Array.Length
jest używana dla count
argumentu Buffer.BlockCopy
w tablicach, których elementy są większe niż jeden bajt w rozmiarze.
Opis reguły
W przypadku używania Buffer.BlockCopy
count
argument określa liczbę bajtów do skopiowania. Argumentu należy używać Array.Length
count
tylko w przypadku tablic, których elementy są dokładnie jednym bajtem rozmiaru. byte
, sbyte
i bool
tablice mają elementy o rozmiarze jednego bajtu.
Jak naprawić naruszenia
Określ liczbę bajtów, które mają być kopiowane dla argumentu count
.
Przykład
Naruszenie:
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);
}
}
Poprawka:
Jeśli elementy tablicy mają rozmiar większy niż jeden bajt, można pomnożyć długość tablicy według rozmiaru elementu, aby uzyskać liczbę bajtów.
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));
}
}
Kiedy pomijać ostrzeżenia
Zazwyczaj nie można bezpiecznie pominąć ostrzeżenia z tej reguły.