Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
CA2018: Das
| 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.