Teilen über


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 10 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