Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
CA2018:
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA2018 |
| Заголовок | Аргумент count в Buffer.BlockCopy должен задавать число байт копирования |
| Категория | Надежность |
| Исправление является критическим или не критическим | Не критическое |
| Включен по умолчанию в .NET 10 | Как предупреждение |
Причина
Это правило срабатывает, если Array.Length используется для аргумента count параметра Buffer.BlockCopy в массивах, элементы которых имеют размер больше одного байта.
Описание правила
При использовании Buffer.BlockCopy аргумент count указывает число копируемых байт. Использовать Array.Length для аргумента count следует только с массивами с размером элементов ровно один байт. Массивы с однобайтовым размером элементов: byte, sbyte и bool.
Устранение нарушений
Укажите, сколько байтов нужно скопировать для аргумента count.
Пример
Нарушение:
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);
}
}
Исправление:
Если элементы массива имеют размер больше одного байта, можно умножить длину массива на размер элемента, чтобы узнать количество байтов.
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));
}
}
Когда лучше отключить предупреждения
Отключать предупреждения из этого правила обычно НЕ безопасно.