Бөлісу құралы:


CA2022: избегайте неточного чтения при использовании Stream.Read

Свойство Значение
Идентификатор правила CA2022
Заголовок Избегайте неточного чтения с помощью Stream.Read
Категория Надежность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Как предупреждение
Применимые языки C# и Visual Basic

Причина

Выполняется вызов Stream.Read или Stream.ReadAsync, а возвращаемое значение не проверяется.

Описание правила

Stream.Read и Stream.ReadAsync могут возвращать меньше байтов, чем запрошено, что приведет к ненадежности кода, если возвращаемое значение не проверяется.

Устранение нарушений

Чтобы устранить нарушение, проверьте возвращаемое значение (общее количество байтов, считываемых в буфер) или вызов Stream.ReadExactly или Stream.ReadExactlyAsync вместо этого.

Пример

В следующем фрагменте кода показано нарушение CA2022 и исправление нарушения.

void M1(Stream stream, byte[] buffer)
{
    // CA2022 violation.
    stream.Read(buffer, 0, buffer.Length);

    // Fix for the violation.
    stream.ReadExactly(buffer);
}
Shared Sub M(stream As Stream, buffer As Byte())
    ' CA2022 violation.
    stream.Read(buffer, 0, buffer.Length)

    ' Fix for the violation.
    stream.ReadExactly(buffer)
End Sub

Когда лучше отключить предупреждения

Вы не должны подавлять предупреждения из этого правила, так как приложение может зависать, если вы не исправите нарушения.

См. также