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.