Udostępnij za pomocą


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 10 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.BlockCopycount argument określa liczbę bajtów do skopiowania. Argumentu należy używać Array.Lengthcount tylko w przypadku tablic, których elementy są dokładnie jednym bajtem rozmiaru. byte, sbytei 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.

Zobacz też