CA2022:避免使用 Stream.Read 进行不精确的读取

属性
规则 ID CA2022
标题 避免使用 Stream.Read 进行不精确的读取
类别 可靠性
修复是中断修复还是非中断修复 非中断
在 .NET 9 中默认启用 作为警告

原因

调用 Stream.ReadStream.ReadAsync 已发出,并且未检查返回值。

规则说明

Stream.Read 如果返回值未选中,则 Stream.ReadAsync 可能会返回的字节数可能少于请求的字节数,从而导致不可靠的代码。

如何解决冲突

若要解决冲突问题,请检查返回值(这是读取到缓冲区中的字节总数),或Stream.ReadExactlyAsync改为调用Stream.ReadExactly

示例

以下代码片段显示 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

何时禁止显示警告

不应禁止显示此规则中的警告,因为如果你未修复违规,应用可能会挂起。

另请参阅