| 属性 | 值 |
|---|---|
| 规则 ID | 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
何时禁止显示警告
不应禁止显示此规则中的警告,因为如果你未修复违规,应用可能会挂起。