次の方法で共有


CA2022: Stream.Read で読み取りを不正確にしないでください

プロパティ
ルール ID CA2022
Title Stream.Read を使用して読み取りを不正確にしないようにする
カテゴリ 信頼性
修正が中断ありか中断なしか なし
.NET 9 では既定で有効 警告として

原因

Stream.ReadまたはStream.ReadAsyncの呼び出しが行われ、戻り値がチェックされません。

規則の説明

Stream.ReadStream.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

どのようなときに警告を抑制するか

違反を修正しないとアプリがハングする可能性があるため、この規則の警告を抑制しないでください。

関連項目