다음을 통해 공유


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

속성
규칙 ID CA2018
제목 count에 대한 Buffer.BlockCopy 인수는 복사할 바이트 수를 지정해야 함
범주 신뢰성
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 경고로서
적용 가능한 언어 C# 및 Visual Basic

원인

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

규칙 설명

Buffer.BlockCopy를 사용하는 경우 count 인수는 복사할 바이트 수를 지정합니다. 요소 크기가 정확히 1바이트인 배열의 Array.Length 인수에 대해서만 count를 사용해야 합니다. 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));
    }
}

경고를 표시하지 않는 경우

일반적으로 이 규칙의 경고를 무시하는 것은 안전하지 않습니다.

참고하기