CA2022:避免使用 Stream.Read 进行不精确的读取
属性 | 值 |
---|---|
规则 ID | CA2022 |
标题 | 避免使用 Stream.Read 进行不精确的读取 |
类别 | 可靠性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为警告 |
原因
调用 Stream.Read 或 Stream.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
何时禁止显示警告
不应禁止显示此规则中的警告,因为如果你未修复违规,应用可能会挂起。