다음을 통해 공유


CA2018: count 복사할 Buffer.BlockCopy 바이트 수를 지정해야 하는 인수입니다.

속성
규칙 ID CA2018
타이틀 Buffer.BlockCopy에 대한 count 인수는 복사할 바이트 수를 지정해야 함
범주 신뢰성
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 경고로

원인

이 규칙은 요소의 크기가 1바이트보다 큰 배열에서 Buffer.BlockCopycount 인수에 대해 Array.Length가 사용된 경우에 트리거됩니다.

규칙 설명

Buffer.BlockCopy를 사용하는 경우 count 인수는 복사할 바이트 수를 지정합니다. 요소 크기가 정확히 1바이트인 배열의 count 인수에 대해서만 Array.Length를 사용해야 합니다. byte, sbyte, bool 배열에는 크기가 1바이트인 요소가 있습니다.

위반 문제를 해결하는 방법

count 인수에 대해 복사하려는 바이트 수를 지정합니다.

예시

위반:

using System;
class Program
{
    static void Main()
    {
        int[] src = new int[] {1, 2, 3, 4};
        int[] dst = new int[] {0, 0, 0, 0};

        Buffer.BlockCopy(src, 0, dst, 0, src.Length);
    }
}

Fix:

배열 요소의 크기가 1바이트보다 큰 경우 배열의 길이에 요소의 크기에 곱하여 바이트 수를 얻을 수 있습니다.

using System;
class Program
{
    static void Main()
    {
        int[] src = new int[] {1, 2, 3, 4};
        int[] dst = new int[] {0, 0, 0, 0};

        Buffer.BlockCopy(src, 0, dst, 0, src.Length * sizeof(int));
    }
}

경고를 표시하지 않는 경우

이 규칙의 경고는 표시해야 합니다.

참고 항목