Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis 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.