通过


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

属性
规则 ID CA2022
标题 避免使用 Stream.Read 进行不精确的读取
类别 可靠性
修复是导致破坏性更改还是非破坏性更改 非中断
在 .NET 10 中默认启用 作为警告
适用的语言 C# 和 Visual Basic

原因

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

规则说明

Stream.ReadStream.ReadAsync 可能返回的字节数少于请求的数量,如果不检查返回值,这将导致代码不可靠。

如何解决违规

若要解决违规问题,可以检查返回值(即读取到缓冲区的字节总数),或改为调用Stream.ReadExactlyStream.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

何时禁止显示警告

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

另请参阅