Share via


CA2018: Das count-Argument für Buffer.BlockCopy sollte die Anzahl der zu kopierenden Bytes angeben

Eigenschaft Wert
Regel-ID CA2018
Titel Das count-Argument für Buffer.BlockCopy sollte die Anzahl der zu kopierenden Bytes angeben
Kategorie Zuverlässigkeit
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Warnung

Ursache

Diese Regel wird ausgelöst, wenn Array.Length für das count-Argument von Buffer.BlockCopy in Arrays verwendet wird, deren Elemente größer als ein Byte sind.

Regelbeschreibung

Wenn Sie Buffer.BlockCopy verwenden, gibt das count-Argument die Anzahl der zu kopierenden Bytes an. Sie sollten Array.Length nur für das count-Argument in Arrays verwenden, deren Elemente genau ein Byte groß sind. byte-, sbyte- und bool-Arrays weisen Elemente auf, die ein Byte groß sind.

Behandeln von Verstößen

Geben Sie die Anzahl der Bytes an, die Sie für das count-Argument kopieren möchten.

Beispiel

Verstoß:

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);
    }
}

Korrektur:

Wenn die Elemente Ihres Arrays größer als ein Byte sind, können Sie die Länge des Arrays mit der Elementgröße multiplizieren, um die Anzahl der Bytes zu ermitteln.

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));
    }
}

Wann sollten Warnungen unterdrückt werden?

Es ist im Allgemeinen NICHT sicher, eine Warnung von dieser Regel zu unterdrücken.

Siehe auch