CA2022:避免使用 Stream.Read 不發生讀取
屬性 | 值 |
---|---|
規則識別碼 | CA2022 |
職稱 | 避免使用 Stream.Read 發生不精確的讀取 |
類別 | 可靠性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 作為警告 |
原因
呼叫 或 Stream.ReadAsync 已進行Stream.Read,且不會檢查傳回值。
檔案描述
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
隱藏警告的時機
如果您未修正違規,您不應該隱藏此規則的警告,因為您的應用程式可能會停止回應。